perm filename CKLZ.OLD[1,ALS] blob
sn#511862 filedate 1980-05-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00045 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00009 00002 TITLE CKL CHECKERS LEARNING ROUTINES 12/8/70
C00013 00003 MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER
C00016 00004 DSTREE TREFIX BK MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS
C00018 00005 TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1
C00021 00006 LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4
C00026 00007 BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1
C00030 00008 LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2
C00034 00009 TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2
C00040 00010 NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B
C00044 00011 LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2
C00047 00012 ALS1 ALS1B ALS1A ALS2 ALS3
C00051 00013 ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8
C00053 00014 LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3
C00060 00015 BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE
C00066 00016 NOMOV NOMOVE ENDERR LERR MAGOU2 MAGOU3 NOSTO STOP STOMP STTEST STBIT
C00070 00017 LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L13 L14 L14N
C00077 00018 L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
C00081 00019 TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN
C00084 00020 C2P C3P C4P C5 C2N C3N C4N C6
C00086 00021 CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
C00087 00022 LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC
C00090 00023 TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL
C00093 00024 FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT
C00096 00025 LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20
C00101 00026 LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS
C00102 00027 EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG
C00106 00028 DSAVE RSAVE
C00107 00029 DFILL DFILL2 DSKERR DATA RDATA
C00108 00030 MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF
C00112 00031 BLOWUP INPSIZ BOKSIZ INPMAX INPCNT INPKNK SAVMOV SAVM0 SAVM1 SAVMZ PADMOV PADMO2 INDEXS INDEXX INDEXA INDEXP INDEXK INDEXF INDEXC INDEXL INDEXV INDXV2 SIXADD SIXPT2 SIXPT3 SIXPNT SIXOUT
C00120 00032 MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX
C00124 00033 INSERT INS2 INS1A INS4B INS4C INS4D INS4E INS4F INS5 INSX INS6
C00130 00034 INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR
C00134 00035 DMPFIL DMPFIN DMPFIY DMPFIZ DMPDMP DMPFI3 DSKBKD DSKBKM BKMIN BKMIN2 INPA INPP INPM INPV INPK BOOKA BOOKP BOOKK BOOKM BOOKV BOOKI BOOKMS FILEIN FILEI2 FILEI3 INBITS
C00140 00036 BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4
C00143 00037 FIXX NOFIND FIXK FIXK2
C00146 00038 RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13
C00150 00039 FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3
C00153 00040 SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
C00160 00041 SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 XPAR TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE PAR TABLST TAB1 TABLS2 TAB2 TAB3 TAB3A TAB3B TAB3C TAB4 TAB4A TAB4B TAB5 TAB5A TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB24A TAB25 TAB26 TAB27 TAB31 TAB32 TAB32A TAB33 TAB34
C00173 00042 LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES
C00176 00043 BOUT BOUT0 BOUT1 BOUT2 BOUT3
C00179 00044 XEROX XEROX1 XEROX2 XER2A XEROX3 XEROX4 XEROX5 XEROX7 XEROX8 XEROXZ VARNUM XXIND XXVAL BLACK WHITE NOKING WITHKI DSKIN5 FRMBU5 DSKER5 DATAG5 TERTXT MTEXT MTEXT1 MTEXT2
C00187 00045 BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
C00196 ENDMK
C⊗;
TITLE CKL CHECKERS LEARNING ROUTINES 12/8/70
;WITH FIX ROUTINE ADDED
;REVISED TO REDUCE MEMORY AND DISK SIZES
INTERN BEGINL,CMOVE,HEADFL,LBYT,LFLAG,NOSTO
INTERN LXF,LZERO,TRNKNO,DIVIDE,SYM,LC,INPSIZ
INTERN LZER2,LZER3,XEROX
INTERN DFILL,RSAVE,DSAVE,EVAL11,LOADTA
INTERN WHOWON,LCONTS,LCONTZ,ZL,BEGL3
INTERN BOOKA,BOOKP,BOOKK,BOOKM,BOOKI,INPSIZ,INPA,INPP,INPK,LABEL
INTERN TABFIX,TABLST,PAR,XPAR,INPCNT
EXTERN LPTBUF,NUM2,GETWHR,DNUM
EXTERN FINDX1,X4NORM,X4ALL,X4TAB
EXTERN CRIP,REVERA,REVERP,REVERK
EXTERN COLOR,BITTAB
EXTERN LEGAL,MAGIN,MAGOUT,MAGTAP,TPUNIT,OUTIN,MGIBUF,MGOBUF
EXTERN NOYES,NUM3,NUMOUT,OCT2,OCTOUT,RJ2,RJ4,RJOUT,SCAN,TYI
EXTERN TERPRI,EOL,NEWLIN,PRINT,S,SI
EXTERN LOSE,LPTFIX,DWFLAG
EXTERN PLA,PLP,PLK,PLRF,PLLF,PLRB,PLLB,PUP,ZZ,PLY
EXTERN PRNAME,LPFLAG,BEGIN,COMEND
EXTERN TA,TP,TK,TYO,LASCAR,ERR,SIDE,OJ
EXTERN USEBOK,TYPE
INTERN EV,CFTAB2,INIT1,CFLAG,INDEXX,INDEXF
CFTAB2: MOVEI U1,[ASCIZ /CFTAB2 /]
JRST ZZZZZZ
INIT1: MOVEI U1,[ASCIZ /INIT1 /]
JRST ZZZZZZ
TLIST: MOVEI U1,[ASCIZ /TLIST /]
JRST ZZZZZZ
PCCNT: MOVEI U1,[ASCIZ /PCCNT /]
JRST ZZZZZZ
KSTART: MOVEI U1,[ASCIZ /KSTART /]
ZZZZZZ: PUSHJ PDP,PRINT
EV:
PHASEV: POPJ PDP,
PHASE: Z
CFLAG: Z
Z
Z
EEB: BLOCK 20
Z
Z
EEB2: BLOCK 20
RFU: Z
LFU: Z
LBU: Z
RBU: Z
; REGISTER ASSIGNMENTS
;ASSIGNMENT USAGE
Z=0
X1=1 ; INDEX MAIN
U1=2
X2=3 ; INDEX PATH
U2=4
X3=5 ; INDEX PLAUS
U3=6
X4=7 ; INDEX TWIG
U4=10
X5=11 ; PASS COLOR
U5=12
Q=13
A=14 ; ACTIVE
P=15 ; PASSIVE
K=16 ; KINGS
PDP=17 ; PUSHJ
;MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER
MA: BLOCK 300
MP: BLOCK 300
MK: BLOCK 300
ME: BLOCK 300
MWL: BLOCK 300 ;WHOWON INDICATORS
OPDEF TTYUUO [51B8]
BEST: Z ;BEST INDEX VALUE
X1S: Z
X2S: Z
SAVX2: Z
U2SS: Z
WHOWON: Z
WINLOS: Z ;COUNT OF DISTANCE TO WIN OR LOSS
BKMOVE: Z ;BOOK MOVE SAVE
X4CNT: Z
X4MOVE: Z
HIGH: BLOCK 4
LOW: BLOCK 4
EQUAL: BLOCK 4
THIGH: Z
TLOW: Z
TEQUAL: Z
HEADFL: -1
U4S: Z ;TEMPORARY STORAGE
KEAR: Z ;FLAG FOR KEAR LEARNING DATA
BOLFLG: Z ;FLAG FOR BOLAND LEARNING DATA
LXF: Z ;FLAG FOR LEGAL BOOK MOVE
TRNKNO: 0 ;TRUNK COUNTER
LBYT: Z ;BYTE POINTER
LFLAG: Z
CMOVE: Z
COUNT: Z
LPOINT: Z ;POINTER FOR VARIATIONS
STIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
MOVEM U1,TIME
POPJ PDP,
LTIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
SUB U1,TIME
ADDM U1,LABEL
LTIME0: ADDM U1,TIME
MOVEI U2,↑D1000
IDIVM U1,U2
MOVE U1,U2
PUSHJ PDP,RJOUT1
POPJ PDP,
RTIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
SUB U1,TIME
JRST LTIME0
TIME: Z
HEADER: ASCIZ /Special symbols- ' Best move, = fair only, % definitely bad move.
Move # Move Legal Moves
/
;DSTREE TREFIX BK MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS
;THE FOLLOWING DEFINITIONS ARE NEEDED TO DEFINE GLOBELS.
;THIS SECTION TAKES THE PLACE OF PD.MAC
INTERN TRESET,TREE,TELPAR,SIG,SETW,SETPAR,SETB,FIND,MOVIN
INTERN ACCEPT,BDOUT,PLAYBS,PC,PB,TELLC,LTREE,GO,DEBUG
INTERN REVERS,PW,CTOTAL,LEGM,W,D,BOUT,MESS,IA,FINDM
INTERN CDIFF,DIFF,TOTAL,CRFST,FSTCR,LPTREE,RUNT,CRUNT,CTELLC,CSFLAG
INTERN MOVOUT,MOVES,IP,IK,TEST,SUM,RECIN
INTERN MOP,MOVX,EXIT1,DATA
INTERN DSTREE,TREFIX,BK
EXTERN NOTICE
DSTREE:
TREFIX:
BK:
MOVOUT:
IP:
IK:
CDIFF:
TEST:
CRFST:
LPTREE:
CRUNT:
CTELLC:
TELPAR:
SIG:
SETW:
SETPAR:
SETB:
FIND:
MOVIN:
;BDOUT:
PLAY:
PLAYBS:
PC:
PB:
GO:
DEBUG:
REVERS:
PW:
CTOTAL:
W:
D:
SUM:
RECIN:
EXIT1:
RELEAS 5,
JRST NOTICE
IA:
FINDM:
DIFF:
TOTAL:
FSTCR:
RUNT:
CSFLAG:
TRESET:
TREE:
MOP:
TELLC:
MOVX:
LTREE: Z
MESS: ASCIZ /
/
;TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1
;FIRST LEVEL TABLE EVALUATION MACROS AND DATA
DEFINE MACZ (SC) <;TABLE EVALUATION SCORE
MOVE Z,SIGZ1'SC(A)
CAMN K,A
JRST .+7 ;DO NOT SCORE BOOK MOVE
CAMGE Z,SIGZ1'SC(K)
AOS HIGH1'SC(P)
CAMN Z,SIGZ1'SC(K)
AOS EQU1'SC(P)
CAMLE Z,SIGZ1'SC(K)
AOS LOW1'SC(P)>
TAB1E: MACZ 1
MACZ 2
MACZ 3
MACZ 4
MACZ 5
MACZ 6
POPJ PDP,
SIGZ11: BLOCK 20
SIGZ12: BLOCK 20
SIGZ13: BLOCK 20
SIGZ14: BLOCK 20
SIGZ15: BLOCK 20
SIGZ16: BLOCK 20
HIGH11: BLOCK 4
HIGH12: BLOCK 4
HIGH13: BLOCK 4
HIGH14: BLOCK 4
HIGH15: BLOCK 4
HIGH16: BLOCK 4
EQU11: BLOCK 4
EQU12: BLOCK 4
EQU13: BLOCK 4
EQU14: BLOCK 4
EQU15: BLOCK 4
EQU16: BLOCK 4
LOW11: BLOCK 4
LOW12: BLOCK 4
LOW13: BLOCK 4
LOW14: BLOCK 4
LOW15: BLOCK 4
LOW16: BLOCK 4
DEFINE MACP (SC) <;PRINT MACRO
MOVE X2,HIGH1'SC(P)
ADD X2,LOW1'SC(P)
ADD X2,EQU1'SC(P)
MOVEM X2,X2S
MOVE X3,LOW1'SC(P)
IMULI X3,↑D100
IDIV X3,X2
MOVE U1,X3
PUSHJ PDP,RJOUT3
MOVE X3,HIGH1'SC(P)
IMULI X3,↑D100
MOVE X2,X2S
IDIV X3,X2
MOVE U1,X3
SETZM HIGH1'SC(P)
SETZM EQU1'SC(P)
SETZM LOW1'SC(P)
PUSHJ PDP,RJOUT1>
TAB1P: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TABLE L11H L12H L13H L14H L15H L16H
/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVEI P,3
TAB1P1: MOVEI U1,[ASCIZ /PHASE/]
PUSHJ PDP,PRINT
MOVE U1,P
PUSHJ PDP,NUMOUT
MACP 1
MACP 2
MACP 3
MACP 4
MACP 5
MACP 6
PUSHJ PDP,TERPRI
SOJGE P,TAB1P1
PUSHJ PDP,TERPRI
POPJ PDP,
;LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4
LOADTA: PUSHJ PDP,DFILL
BEGINL: PUSHJ PDP,TERPRI
SETZM TRNKNO
SETOM HEADFL
MOVEI U1,1
MOVEM U1,SI
SETOM LCONTF#
SETZB U1,LDEPTH
ADDI U1,3 ;ALLOW 3 MORE
MOVEM U1,KDEPTH
SETZM LFLAG6
SETZM LFLAG1
BEGL2: SETZM PRNVAR ;CHANGING TO SETOM DID NOT HELP
SETZM DSKTAP
SETZM MGIBUF
; PUSHJ PDP,INSZZ ;One time in to set up DIRECT file
BEGL4: MOVEI U1,[ASCIZ /TYPE B, K, OR L :/]
PUSHJ PDP,PRINT
PUSHJ PDP,TYI
CAIE U1,12
CAIN U1,15
JRST .-3
CAIN U1,"B"
JRST BEGLB
SETZM BOLFLG ;NOT BOLAND
CAIN U1,"K"
JRST BEGLK
CAIN U1,"L"
JRST BEGLL
JRST BEGL3
;BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1
BEGLB: MOVE U1,[SIXBIT /BOLAND/]
MOVEM U1,DATAG
SETOM BOLFLG ;SET FLAG
MOVEI U1,[ASCIZ /BOLAND WILL BE USED/]
JRST .+10
BEGLK: MOVE U1,[SIXBIT /KEARS/]
MOVEM U1,DATAG
MOVEI U1,[ASCIZ /KEARS WILL BE USED/]
JRST .+4
BEGLL: MOVE U1,[SIXBIT /LEES/]
MOVEM U1,DATAG
MOVEI U1,[ASCIZ /LEES WILL BE USED/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TYI
CAIE U1,15
JRST .-2
BEGL3: PUSHJ PDP,DSKINI
JRST BEGL4
PUSHJ PDP,DSKIN2
JRST BEGL4
GETGO: MOVEI Z,777777
MOVEM Z,CFLAG
SETOM TRUNKF
SETZM HIGH
SETZM LOW
SETZM EQUAL
SETZM THIGH
SETZM TLOW
SETZM TEQUAL
SETZM HEADFL
SOS HEADFL
SETZM COUNT ;INITIALIZE FOR LEARNING
PUSHJ PDP,STIME
;ASK TELETYPE WHERE TO START--IF NOT AT FRONT, THEN
;RESET TRNKNO. SKIP OVER TRNKNO NUMBER OF TRUNKS NOW.
MOVEI U1,[ASCIZ / TRUNK NUMBER? : /]
PUSHJ PDP,PRINT
SETZM VARNUM
MOVEI U1,1
PUSHJ PDP,SCAN ;GOBBLE UP CR
PUSHJ PDP,EOL ;SCAN CHAR.
JRST BEGIN3 ;CR
SOS U2,U1 ;NUMBER
MOVEM U1,TRNKNO ;STARTING TRUNK NO.
SETZM KEAR ;TURN OFF KEAR LEARNING FLAG
LB1: PUSHJ PDP,NEWLIN ;FIRST CHAR. OF CARD IMAGE IN U1
SKIP ;EOF
CAIN U1,"<" ;LEES OR TESCHELEIT LEARNING DATA?
SETZM KEAR ;YES, SO SET FLAG TO 0
CAIN U1,"!" ;KEAR LEARNING DATA?
AOS KEAR ;YES, SO SET FLAG
CAIN U1,"&"
JRST .+3
CAIE U1,"#" ;A "#"?
JRST LB1 ;NO
SOJGE U2,LB1 ;YES, BUT IS IT PROPER TRUNK CARD?
PUSHJ PDP,COMM1
SETZM X2 ;YES
SETOM LRNJMP ;TO SKIP DATA UPDATE FIRST TIME
JRST LTR
COMM2: SOJG U2,COMM+1
MOVEI X1,15
PUSHJ PDP,TYO
MOVEI U1,15
PUSHJ PDP,MAGOUT ; CKLY
JRST COMM3
COMM: MOVEI U2,26
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST ENDERR ;EOF NOT EXPECTED HERE
MOVE X1,U1
PUSHJ PDP,TYO ;PRINT THE CHAR.
PUSHJ PDP,MAGOUT ; CKLY
CAIE U1,15 ;<CR>?
JRST COMM2 ;NO
COMM3: MOVEI X1,12 ;YES, SO ...
PUSHJ PDP,TYO ;PRINT LINE-FEED
MOVEI U1,12
PUSHJ PDP,MAGOUT
AOSE HEADFL
POPJ PDP,
COMM1: PUSHJ PDP,TERPRI
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
;25 MOVEI U1,HEADER
;25 PUSHJ PDP,PRINT
POPJ PDP, ;AND RETURN
;LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2
LFSTRT: PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST BEGIN ;EOF FOUND
JRST BEGIN2+2 ;U1 HAS FIRST CHAR. FOLLOWING LINE FEED
BEGIN3: PUSHJ PDP,TERPRI
TTYUUO 11,0 ;CLEAR TTY BUFFER
SETOM LRNJMP ;TO SKIP DATA UPDATE FIRST TIME
BEGIN2:
BEGIN4: PUSHJ PDP,NEWLIN ;FIRST CHAR. OF NEW CARD IN U1
JRST BEGIN ;EOF
CAIN U1,"!" ;"!" IS FIRST CHAR. OF KEAR DATA
AOSA KEAR ;KEAR NOT = 0 IFF KEAR DATA BEING PROCESSED
SKIPA
JRST .+10
CAIN U1,"#" ;A TRUNK CARD?
JRST LTR ;YES
CAIN U1,"&" ;TEST FOR BOLAND HEADER
JRST LTR
CAIE U1,"<" ;COMMENT CARD?
JRST .+4 ;NO
SETZM KEAR ;TURN OFF KEAR LEARNING FLAG
PUSHJ PDP,COMM ;YES, SO PRINT COMMENT
JRST BEGIN4 ;AND GET NEXT CARD
CAIN U1,">" ;END OF DATA?
JRST LSTOP ;YES
CAIE U1,14 ;FORM FEED?
JRST .+4 ;NO
PUSHJ PDP,MAGIN ;YES, SO GET NEXT CHARACTER & TRY AGAIN
HALT ;EOF FOUND
JRST BEGIN4+2
CAIE U1," " ;COLUMN 1 A BLANK?
JRST LMOVE+2 ;NO, SO MUST BE A MOVE CARD
JRST LBRNCH ;MUST BE VARIATION CARD
LTR: SETZM WHOWON ;TREAT GAME AS A DRAW TILL WE KNOW BETTER
SETZM MOVNUM#
MOVEI U1,"TK"
SKIPN KEAR
SETZ U1,
SETZM VARNUM
MOVEM U1,LPOINT ;A TRUNK CARD HAS BEEN FOUND
LTR1: AOS U1,TRNKNO ;ADD 1 TO TRUNK CARD COUNTER
CAIG U1,1 ;TRNKNO NOW STARTS AT 1
JRST LCONT
; JUMPE U1,LCONT ;CKLZ BYPASS
;TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2
TTYUU: TTYUUO 2,U2
JRST LCONT
PUSH PDP,[EXP TTYUU]
CAIE U2,"S"
CAIN U2,"s"
SKIPA
JRST TTYUU2
SKIPE FILCHG
PUSHJ PDP,PADMOV
MOVEI U1,[ASCIZ / RETURN FROM PADMOS /]
PUSHJ PDP,PRINT
RELEAS 5,
MOVEI U1,[ASCIZ / RELEASED 5 /]
PUSHJ PDP,PRINT
PUSHJ PDP,INSZZ
JRST COMEND
; POPJ PDP, ;THIS DOES NOT WORK HERE
TTYUU2: CAIE U2,"L"
CAIN U2,"l"
SKIPA
JRST TTYUU3
SKIPE FILCHG
PUSHJ PDP,PADMOV
RELEAS 5,
PUSHJ PDP,INSZZ
JRST XEROX
; PUSHJ PDP,XEROX
; JRST COMEND
TTYUU3: CAIE U2,"R"
JRST .+3
SOS RFLAG#
POPJ PDP,
CAIE U2,"F"
JRST .+3
SETOM LFLAGT#
POPJ PDP,
CAIN U2,"T"
JRST TOTALS
;EXTRA COMMANDS GO IN HERE
POP PDP,
JRST COMEND+5
LCONTS: SKIPE LCONTF
JRST LCONT
LCONTZ: SETZM MGIBUF
SETOM LCONTF
SETOM TRNKNO
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,DSKINI
JRST BEGIN3 ;EXTRA INSTRUCTION NEEDED
PUSHJ PDP,DSKIN2 ; 4 APR 80
JRST BEGIN3
JRST BEGIN3
LLSTOP: AOS U1,TRNKNO
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / IS THE NEXT TRUNK TO READ/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TYPE SAVE TO SAVE/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST BEGIN
LSTOP: PUSHJ PDP,MAGIN ;GET NEXT CHAR. TO PRINT
JRST .+4 ;NO MORE CHARACTERS, SO UPDATE EVAL TABLES
MOVE X1,U1 ;PUT CHAR. IN X1 FOR TYO
PUSHJ PDP,TYO ;PRINT CHAR.
JRST LSTOP ;DO IT AGAIN
SETZM COUNT
JRST TTYUU
LCONT: SKIPE BOLFLG
JRST BOLAND
MOVE U1,TRNKNO
PUSHJ PDP,DNUM ;Start trunk line with the trunk number
MOVEI U1,11
PUSHJ PDP,MAGOUT
MOVEI U1,140 ;Will go to an "a" on first AOS
MOVEM U1,VARNAM# ;Reset variation letter-name
SKIPE TRUNKF
PUSHJ PDP,COMM
MOVSI A,377360 ;LEARN SOME MORE FROM STARTING BOARD
MOVEM A,TA ;GET INITIAL BOARD FOR THIS TRUNK
MOVEI P,17377
MOVEM P,TP
SETZB X2,TK
SETZM COLOR
SETOM X4VAR ;TO COUNT VARIATION BOARDS
JRST BEGIN2 ;GO GET MOVES NOW
LMOVE: PUSHJ PDP,MAGIN ;INPUT CHARACTERS FOR BKOK MOVE
JRST ENDERR ;EOF FOUND, NOT EXPECTED HERE
CAIN U1,12 ;A LINE FEED?
JRST LFSTRT ;YES
CAIE U1,15 ;IS IT A CR
CAIN U1," " ;A SPACE?
JRST LMOVE ;YES, SO TRY AGAIN
SKIPE LRNJMP ;TEST IF JUMP
JRST LMOVE1 ;LAST MOVE WAS A JUMP
UPDTSC: SKIPGE A,BEST
JRST LMOVE1 ;DO NOT SCORE THIS MOVE
MOVE K,SI ;MOVE INDEX
MOVE P,PHASE ;PHASE IN P
MOVE X3,S(A) ;EVAL SCORE FOR BOOK MOVE
CAMN K,A
SOJLE K,LMOVE1
CAMGE X3,S(K) ;IS IT THE BEST SCORE?
AOS HIGH(P) ;H COUNT (ADD 1 FOR EVERY SCORE > BEST)
CAMN X3,S(K)
AOS EQUAL(P) ;E COUNT
CAMLE X3,S(K)
AOS LOW(P) ;L COUNT (ADD 1 FOR EVERY SCORE < OR = BEST)
PUSHJ PDP,TAB1E ;ON PAGE 2
SOJG K,UPDTSC+3
LMOVE1: SETZM NNNONO#
CAIGE U1,50 ;DO WE PRINT IT?
JRST .+3 ;SPECIAL FOR CKLY
CAIG U1,71
JRST LMOVE2
MOVE X1,U1
PUSHJ PDP,TYO
; PUSHJ PDP,MAGOUT
CAIN U1,"%" ;A BAD MOVE
JRST NOGOOD
CAIN U1,"=" ;ONLY FAIR MOVE
JRST NOGOOD
CAIN U1,"'" ;BEST MOVE
JRST BSTMOV
LMOVE2: SETZM SI
MOVE A,TA ;GET LAST BOARD
MOVE P,TP
MOVE K,TK
MOVEM A,PLA ;STORE BOARD FOR FUTURE PUPPING
MOVEM P,PLP
MOVEM K,PLK
SETZB X3,LXF ;ZERO INDEX & LEGAL BOOK MOVE FLAG
AOS X2 ;INCREMENT MOVE POINTER
CAIN U1,"X" ;IS IT AN "X"
JRST XCODE ;YES
CAIN U1,"*" ;A STAR?
JRST LA1 ;YES
CAIL U1,60 ;IS IT A NUMBER?
CAILE U1,71 ;IT IS IF 57 < U1 < 72.
SOJA X2,BEGIN2 ;NOT A NUMBER, PROBABLY A <CR>
PUSHJ PDP,NOSTO+2 ;A NUMBER, SO DON'T SAVE BOARD
JRST LA4
;NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B
NOGOOD: SETOM NNNONO
JRST .+3
BSTMOV: MOVEI Z,1 ;FOR DOUBLE CREDIT LATER
MOVEM Z,NNNONO
PUSHJ PDP,MAGIN
HALT
JRST LMOVE2
NONONO: MOVE U1,COLOR
ADDI U1,1
MOVEM U1,WHOWON ;1 WHITE WINS, 2 BLACK WINS
JRST .-6
KEAR.: PUSHJ PDP,NOSTO ;GET NEXT MOVE
MOVE U3,LPOINT
ANDI U3,37777
LSH U3,16 ;GET IN POSITION
KEAR.0: PUSHJ PDP,MAGIN
HALT
MOVE U2,U1
PUSHJ PDP,MAGIN
HALT
CAIN U1,15 ;NOT A CR
JRST KEAR.2
CAIE U1," "
CAIN U1,"+"
JRST KEAR.2 ;SINGLE CHARACTER CASE
LSH U2,7
IOR U2,U1
PUSHJ PDP,MAGIN
HALT
JRST KEAR.3
KEAR.2: CAIL U2,60 ;TEST FOR LETTER OR NUMBER
CAILE U2,71
JRST .+3
ADDI U2,14000 ;ADD LEADING 0
JRST .+3
LSH U2,7
ADDI U2,60 ;ADD TRAILING 0
KEAR.3: IOR U2,U3
PUSHJ PDP,BDSTOR
CAIE U1," " ;NOT A SPACE
CAIN U1,15 ;NOT A CR
JRST LA4 ;WE ARE THROUGH
CAIN U1,"+"
JRST KEAR.0 ;SAVE AGAIN
JRST LA4
LA1: SKIPE KEAR ;WHICH DATA IS BEING PROCESSED?
JRST KEAR. ;KEAR DATA.
MOVE U2,LPOINT ;GET PRESENT BRANCH
LSH U2,6
ADD U2,X2 ;ADD INDEX WITHIN THIS BRANCH
BDSTOR: AOS X4,X4VAR ;INDEX TO NEXT SPACE
MOVEM U2,ME(X4) ;STORE THE BOARD
MOVEM A,MA(X4)
MOVEM P,MP(X4)
SKIPE COLOR ;RIGHTMOST GUARD BIT IS COLOR
TRO K,400
MOVEM K,MK(X4)
TRZ K,400 ;ZERO BIT (IT MIGHT NEED IT)
MOVE Z,WHOWON
HRL Z,WINLOS ;SAVE DISTANCE TO WIN OR LOSS
MOVEM Z,MWL(X4) ;SAVE WHOWON FLAG
SKIPE KEAR
POPJ PDP, ;KEAR WANTS RETURN
AOSE DWFLAG ;IT'S -1 ONLY WHEN COMING FROM XCODE
PUSHJ PDP,NOSTO ;GET BOOK MOVE
LA4: PUSHJ PDP,PHASEV ;COMPUTE INITIAL PHASE
MOVE U1,PHASES(U5)
MOVEM U1,PHASAD ;FOR USE IN EVA
SETZB X3,LRNJMP# ;ASSUME NORMAL MOVE
SETZM STOP ;WIPE SLATE CLEAN
PUSHJ PDP,LEGALY ;NOW GET ALL TRUNKS
JRST NOMOV ;NO LEGAL MOVES
JRST .+2 ;DEPEND ON X4NORM FOR SINGLE MOVE DETECT
AOS U1,STOP ;BIT 35 USED FOR X3=0 CASE
; MOVEI U1,15
; PUSHJ PDP,MAGOUT
; MOVEI U1,12
; PUSHJ PDP,MAGOUT
; PUSHJ PDP,LEGM ;SPECIAL FOR CKLY***
PUSHJ PDP,X4NORM
MOVE Z,X4ALL
TRNN Z,16
JRST LA4JJ ;MAY BE FORKED
LA4A: SKIPN U1,WHOWON
JRST LA4B ;OK TO GO ON
SUBI U1,1
CAMN U1,COLOR
JRST LA4J ;DO NOT LEARN
LA4B: SKIPGE NNNONO
JRST LA4J ;DO NOT LEARN
JRST LA4J ; CKLY INSERT
MOVEI X1,1
MOVE Z,EEB
MOVEM Z,EB
MOVEM Z,EBA
MOVE Z,EEB2
MOVEM Z,EB2
MOVEM Z,EBA2
SETZM TA ;FILLED AFTER BOOK MOVE
SETZM X4CNT
SETZM X4MOVE
AOJA X3,ALS2
;LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2
LA4JJ: SETOM LRNJMP
ADDI X3,1
MOVE Z,PLRF-1(X3)
MOVEM Z,LA4RF# ;SAVE IF NEEDED
MOVE Z,PLLF-1(X3)
MOVEM Z,LA4LF#
MOVE Z,PLLB-1(X3)
MOVEM Z,LA4LB#
MOVE Z,PLRB-1(X3)
MOVEM Z,LA4RB#
PUSHJ PDP,PUP
JRST NOMOV ;ERROR SHOULD NEVER HAPPEN
CAME P,TP
JRST .+3
MOVEM A,TA
MOVEM K,TK
PUSHJ PDP,PUP
JRST LDEF ;0NLY ONE MOVE
MOVE Z,LA4RF
MOVEM Z,PLRF-1(X3)
MOVE Z,LA4LF
MOVEM Z,PLLF-1(X3)
MOVE Z,LA4LB
MOVEM Z,PLLB-1(X3)
MOVE Z,LA4RB
MOVEM Z,PLRB-1(X3)
SETZM LRNJMP
SOJA X3,LA4A
LA4J: SETOM LRNJMP
SETZM TA
ADDI X3,1
PUSHJ PDP,PUP
JRST LDEF
CAME P,TP
JRST .-3
MOVEM A,TA
MOVEM K,TK
JRST LDEF
DSKINI: INIT 4,0
SIXBIT /DSK/
XWD MGOBUF,MGIBUF
JRST DSKER
SETZM DATAG+2
MOVE U1,[SIXBIT /CH4ALS/] ;Was / 2KDH/
MOVEM U1,DATAG+3
LOOKUP 4,DATAG
JRST DSKER
INBUF 4,11
AOS (PDP)
POPJ PDP,
DSKER: MOVEI U1,[ASCIZ /NO GAMES ON DSK/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
RELEAS 4,
POPJ PDP,
DATAG: SIXBIT /LEES/
SIXBIT //
Z
Z
DSKIN2: INIT 5,0 ;CKLY FIX
SIXBIT /DSK/
XWD MGOBUF,0
JRST DSKER2
SETZM DATAG2+2
MOVE U1,[SIXBIT / 1ALS/]
MOVEM U1,DATAG2+3
ENTER 5,DATAG2
JRST DSKER2
OUTBUF 5,11
AOS (PDP)
POPJ PDP,
FRMBUF: BLOCK 3
DSKER2: MOVEI U1,[ASCIZ /COULD NOT ENTER FORM.DAT/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
RELEAS 5,
POPJ PDP,
DATAG2: SIXBIT /FORM/
SIXBIT /DAT/
Z
Z
Z ;GUARD
EB: BLOCK 20
Z
EB2: BLOCK 20
EBA: Z
EBA2: Z
;ALS1 ALS1B ALS1A ALS2 ALS3
ALS1: MOVE Z,EB+2
MOVEM Z,EEB
MOVE Z,EB+1
MOVEM Z,EEB+1
MOVE Z,EB2+2
MOVEM Z,EEB2
MOVE Z,EB2+1
MOVEM Z,EEB2+1
ALS1B: MOVEI X1,1 ;FOR NON-BOOK MOVES
SKIPE LXF
HRLZ X1,X4ALL ;TO LEFT HALF FOR BOOK MOVES
LSH X1,1 ;TEMPORARY FIX TO TEST
SKIPLE NNNONO
LSH X1,1 ;MULTIPLY BY TWO FOR WIN
ADDM X1,SIGLF(U5) ;UPDATE FINAL TABLE
; SUB U5,PHASAD ;Insert for SYM smoothing in situ
; MOVNS U5
; ADD U5,PHASAD
; MOVSS X1
; ADDM X1,SIGLF(U5)
AOS U2,SI
MOVEM Z,S(U2)
SKIPE LXF
MOVEM U2,BEST
ALS1A: MOVE Z,EBA
MOVEM Z,EB ;OLD VALUE MAY HAVE BEEN BLASTED
MOVEM Z,EEB
MOVE Z,EBA2
MOVEM Z,EB2
MOVEM Z,EEB2
MOVE Z,EEB-1
MOVEM Z,EEB+1
MOVE Z,EEB2-1
MOVEM Z,EEB2+1
ALS2: MOVEI X3,1 ;SAFETY MEASURE
MOVE Z,LOSE ;RESET FOR EACH NEW BRANCH
MOVEM Z,ZZ-1
MOVEM Z,ZZ
SETZM LXF
PUSHJ PDP,PUP
JRST LDEF ;LAST BRANCH PROCESSED
SETZM EVFLAG#
AOS X4CNT ;COUNT OF MOVES
CAME P,TP ;IS THIS THE BOOK MOVE
JRST ALS3 ;NO
MOVEM A,TA ;SAVE UPDATED BOARD
MOVEM K,TK
SETOM LXF ;SET FLAG
MOVE U1,X4CNT ;GET MOVE COUNT
SKIPE COLOR
MOVE U1,X4TAB(U1)
HRL U1,WINLOS
MOVEM U1,X4MOVE
SOSGE WINLOS
SETZM WINLOS ;NEG VALUE MEANS TROUBLE
ALS3: MOVEM A,PLA(X3) ;PREPARE FOR EXTENSION
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
MOVE Z,STOP
AND Z,STOMP(X3) ;SAVE EARLIER X3 VALUES ONLY
MOVEM Z,STOP
PUSHJ PDP,LEGAL
JRST ALS8
JRST ALS3J
MOVE Z,STOP
IOR Z,STBIT(X3) ;RECORD THIS NON-JUMP MOVE
MOVEM Z,STOP
CAMGE X3,LDEPTH
AOJA X3,ALS5 ;GO DEEPER
AND Z,STTEST(X3) ;IS OTHER SIDE EVALUATED
JUMPN Z,ALS3A ;YES SO DO FULL EVA
CAMGE X3,KDEPTH ;MUST WE STOP ANYWAY
AOJA X3,ALS5 ;NO
JRST ALS3A ;DO THE BEST WE CAN
;ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8
ALS3J: CAIGE X3,17 ;SPACE LIMIT
AOJA X3,ALS4
SKIPN LXF ;IS THIS THE BOOK MOVE
JRST ALS1A ;NO SO IGNORE THIS PART
SETOM BEST ;IGNORE SIGNAL
JRST LDEF
ALS3A: CAIG X3,1
JRST ALS1B ;LEVI IN ALS1B ADEQUATE
SETZM LFLAG ;DO NOT UPDATE TABLES NOW
PUSHJ PDP,EVA ;BUT DO EVA
ALS3B: SETOM LFLAG ;RESET LEARN FLAG
MOVNS Z
CAMG Z,ZZ-1(X3)
JRST ALS6
MOVEM Z,ZZ-1(X3) ;BACK SCORE
MOVE Z,EEB(X3)
MOVEM Z,EB(X3) ;ALSO BACK EV DATA
MOVE Z,EEB2(X3)
MOVEM Z,EB2(X3)
MOVE Z,EEB-1(X3)
MOVEM Z,EB-1(X3)
MOVE Z,EEB2-1(X3)
MOVEM Z,EB2-1(X3)
JRST ALS6 ;GET NEXT BOARD AT THIS LEVEL
ALS4: MOVE Z,EEB-3(X3) ;ADVANCE SINCE NOT COMPUTED FOR JUMP
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
ALS5: MOVE Z,ZZ-3(X3)
MOVEM Z,ZZ-1(X3)
ALS6: PUSHJ PDP,PUP ;GET NEXT BOARD
JRST ALS7
JRST ALS3
ALS7: CAIG X3,2 ;BACKING FROM WHERE
SOJA X3,ALS1 ;TIME TO UPDATE TABLES
MOVN Z,ZZ-1(X3) ;NORMAL BACK UP
CAMG Z,ZZ-2(X3)
SOJA X3,ALS6 ;GET NEXT BOARD
MOVEM Z,ZZ-2(X3)
MOVE Z,EB(X3)
MOVEM Z,EB-2(X3)
MOVE Z,EB2(X3)
MOVEM Z,EB2-2(X3)
SOJA X3,ALS6
ALS8: MOVE Z,LOSE
JRST ALS3B
;LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3
LDEF: MOVE Z,EBA ;NEXT MOVE PROTECTION
MOVEM Z,EEB-1
MOVE Z,EBA2
MOVEM Z,EEB2-1
MOVEI X3,1
XORM X3,COLOR ;CHANGE COLOR
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST ENDERR ;EOF NOT EXPECETED HERE
CAIN U1,"/" ;A "/"?
SOJA X2,.-3 ;YES, SO DON'T COUNT THIS LAST MOVE
SKIPN TA ;TA NOT = 0 IF BOOK MOVE WAS FOUND
JRST FORGIV-1 ;TA NOT ZERO IF BOOK MOVE FOUND
; SKIPN LRNJMP ;SINGLE JUMPS NOT STORED
; SKIPN USEBOK ;ARE WE SAVING ROTE
; JRST LMOVE+2 ;NO
MOVEM U1,U1S#
SKIPN WINLOS
JRST LDEFA ;NO WINLOS GIVEN
MOVE U1,WHOWON
JUMPE U1,LDEFA ;NO WHOWON DATA
ADD U1,COLOR ;NOTE COLOR ALREADY UPDATED
ADD U1,WINLOS ;ALSO ALREADY CHANGED
TRNN U1,1
AOS U1,WINLOS ;CORECT VALUE TO AGREE
HRLM U1,X4MOVE ;FIX X4MOVE
TRNE U1,1
JRST .+3
LDEFA: SKIPL NNNONO ;IS THIS LESS THAN BEST
PUSHJ PDP,SAVMOV ;NOW SAVE BOARD
MOVE U1,U1S
JRST LMOVE+2
MOVEI U1,[ASCIZ /ILLEGAL BOOK MOVE /]
FORGIV: MOVEM U1,ERRMES#
PUSHJ PDP,MAGIN ;SEE IF WE CAN FORGIVE THIS BOOK MOVE ERROR
JRST ENDERR
CAIE U1,15 ;CR?
JRST .+10
PUSHJ PDP,NEWLIN ;YES, SO GET NEW LINE
JRST ENDERR
CAIN U1," "
JRST LBRNCH
CAIE U1,"&"
CAIN U1,"#"
JRST LTR
CAIE U1,"*"
JRST FORGIV+1
LOC: MOVE U1,ERRMES
PUSHJ PDP,PRINT
MOVEM X2,SAVX2
MOVE U1,LPOINT ;PRINT CURRENT VARIATION POINTER
SETZ X2,
JUMPE U1,.+3
LSHC U1,-7
JUMPN U1,.-1
MOVEM X2,ASCPNT#
MOVEI U1,ASCPNT
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / MOVE /]
PUSHJ PDP,PRINT
MOVE U1,SAVX2 ;PRINT NUMBER OF MOVES WITHIN THIS VARIATION
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
LOC1: PUSHJ PDP,NEWLIN ;FIND TRUNK CARD
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIN U1,"#" ;TRUNK CARD?
JRST LTR ;YES, SO GO TO LTR
CAIN U1,"&" ;A BOLAND HEADER CARD
JRST LTR ;YES
JRST .-6 ;NO, SO GET NEXT CARD
XCODE: PUSHJ PDP,MAGIN ;SKIP OVER BLANK
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIN U1,"/" ;A "/"?
SOJA X2,XCODE ;YES, SO DON'T COUNT "X" & GET NEXT CHAR.
XCODE0: PUSHJ PDP,MAGIN ;GET NEXT CHARACTER
JRST ENDERR ;EOF FOUND, BUT NOT EXPECTED
CAIN U1," " ;A SPACE?
JRST XCODE0 ;YES, SO TRY AGAIN
CAIE U1,15 ;A <CR>?
JRST .+3
PUSHJ PDP,NEWLIN ;YES, SO GET NEW LINE
JRST ENDERR
CAIGE U1,72 ;IS IT A DIGIT?
CAIGE U1,60 ;IT IS IF 57 < U1 < 71.
CAIN U1,"*" ;NOT A NUMBER, SO IS IT A "*"?
AOSA X2 ;IT IS A NUMBER OR A STAR
JRST BEGIN2+2 ;NO MOVES FOLLOW "X"
CAIE U1,"*" ;IS IT A STAR?
JRST .+4 ;NO
SETOM DWFLAG ;YES, SO SET FLAG
PUSHJ PDP,NOSTO
SKIPA
PUSHJ PDP,NOSTO+2 ;GET BOOK MOVE
LA2: ;PUSHJ PDP,FIXX DID NOT WORK HERE
PUSHJ PDP,LEGAL ;START LOOKING FOR MOVES
JRST NOMOVE ;NO LEGAL MOVES, SO GO TO ERROR ROUTINE
AOSA X3
ADDI X3,1
CAIN X3,1 ;FIRST TIME THRU?
JRST LA3 ;YES, SO WE KNOW THIS IS NOT THE BOOK MOVE
SKIPL U1,U4S ;GET MOVE DELTA
JRST BM ;A BACKWARD MOVE
TRNE U1,3 ;RIGHT OR LEFT?
SKIPA U1,PLLF-1(X3) ;LF MOVE
MOVE U1,PLRF-1(X3) ;RF MOVE
JRST .+4
BM: TRNE U1,3 ;RIGHT OR LEFT?
SKIPA U1,PLRB-1(X3) ;RB MOVE
MOVE U1,PLLB-1(X3) ;LB MOVE
TDNN U1,U2SS ;AND HERE IS BOOK MOVE
JRST LA3 ;THEY DO NOT INTERSECT
MOVE A,PLA-1(X3)
MOVEM A,TA ;STORE BOARD AFTER X HAS BEEN COMPLETED
MOVEM A,PLA
MOVE P,PLP-1(X3)
MOVEM P,TP
MOVEM P,PLP
MOVE K,PLK-1(X3)
MOVEM K,TK
MOVEM K,PLK
MOVEI U2,1 ;IN CASE COLOR NEEDS CHANGING
TRNN X3,1 ;"X" CHANGE THE ACTIVE SIDE?
XORM U2,COLOR ;YES
SETZM X3
MOVE U2,BKMOVE
XOR U2,A
MOVEM U2,TP ;TP NOW SET UP
SKIPGE DWFLAG
JRST LA1 ;"X" FOLLOWED BY A "*"
JRST LA4
LA3: PUSHJ PDP,PUP
SOJA X3,.-1 ;BACK UP IF THIS LEVEL IS EXHAUSTED
MOVEM A,PLA(X3) ;FOR FUTURE PUP'S
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
CAIL X3,12 ;SHOULD WE GO DEEPER?
JRST LA3 ;NO, BACK-UP
JRST LA2 ;YES
;BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE
BBRNCH: PUSHJ PDP,MAGIN
HALT
CAIE U1,11 ;LOOK FOR A TAB
JRST .-3
JRST KBRNC2 ;KEAR ROUTINE OK NOW
KBRNCH: MOVEI U2,↑D21
PUSHJ PDP,MAGIN ;GET 23RD CHAR.
HALT
SOJG U2,.-2
KBRNC2: PUSHJ PDP,MAGIN ;THIS IS 23RD CHAR.
HALT
MOVE U3,U1
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
HALT
CAIN U1,15
JRST LDO+4
CAIE U1,11
CAIN U1," "
JRST KBRNC3
LSH U3,7 ;MOVE FIRST CHAR. OVER
IOR U3,U1 ;AND PUT IN SECOND CHAR.
JRST KBRNC4
KBRNC3: CAIL U3,60
CAILE U3,71
JRST .+3
ADDI U3,14000
JRST .+3
LSH U3,7
ADDI U3,60
KBRNC4: MOVEM U3,LPOINT ;STORE VAR. POINTER
PUSHJ PDP,MAGIN ;GET NEXT NON-SPACE CHAR.
HALT
CAIN U1,15 ;WAS CHARACTER A CR
JRST LDO+4 ;AN ERROR
CAIE U1,11 ;IS IT A TAB
CAIN U1," " ;IS IT A SPACE
JRST .-6 ;LAST CHAR. WAS A SPACE OR TAB
MOVE A,U1
PUSHJ PDP,MAGIN
HALT
CAIE U1,15
JRST KBRNC5
CAIL A,60
CAILE U1,71
JRST .+3
ADDI A,14000
JRST .+3
LSH A,7
ADDI A,60
JRST KBRNC6
KBRNC5: LSH A,7
IOR A,U1
KBRNC6: LSH A,16
IOR U3,A
JRST LDO+4 ;NOW GO FIND MATCH
LBRNCH:
MOVEI U1,40 ;Start line with 2 spaces
PUSHJ PDP,MAGOUT
PUSHJ PDP,MAGOUT
MOVE U1,TRNKNO ;then the trunk number
PUSHJ PDP,DNUM
; MOVEI U1,40 ;Another space
; PUSHJ PDP,MAGOUT
AOS U1,VARNAM ;Update and print VARNAM
CAILE U1,"z"
MOVEI U1,"A" ;Go to caps if necessary
PUSHJ PDP,MAGOUT
MOVEI U1,40
PUSHJ PDP,MAGOUT
MOVEI U1,[ASCIZ /VARIATION /]
PUSHJ PDP,PRINT
SETZM MOVNUM
SKIPE PRNVAR
JRST LOC1
SETZB X2,U3 ;ZERO MOVE POINTER
SKIPE BOLFLG
JRST BBRNCH ;BOLAND FORMAT USED
SKIPE KEAR ;KEAR DATA?
JRST KBRNCH ;YES
MOVEI U2,↑D35 ;GET TO CHAR. #37
PUSHJ PDP,MAGIN ;GET CHAR.
JRST ENDERR
PUSHJ PDP,MAGOUT ; CKLY
SOJG U2,.-3 ;JUMP IF NOT CHAR. #36
LUL: SETZB U2,VARNUM
LUPE: PUSHJ PDP,MAGIN ;GET CHAR. FROM INPUT BUFFER
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIGE U1,72 ;IS CHAR. A DIGIT?
CAIGE U1,60 ;IT IS IF 57 < U1 < 72.
JRST LDO ;NO
MOVE X1,U1
PUSHJ PDP,TYO ;CKLY FIX
PUSHJ PDP,MAGOUT ; CKLY
IMULI U2,12
ADD U2,U1
SUBI U2,60
JRST LUPE
LDO: LSH U3,6 ;SAVE LAST NUMBER
ADD U3,U2
CAIN U1," " ;ARE WE THROUGH?
JRST .+5
PUSHJ PDP,MAGOUT ; CKLY
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
JRST LUL ;NO
PUSHJ PDP,TERPRI
MOVEI U1,15
PUSHJ PDP,MAGOUT ; CKLY
MOVEI U1,12
PUSHJ PDP,MAGOUT ; CKLY
MOVEM U3,LPOINT ;STORE THIS BRANCH NUMBER
MOVEM U3,VARNUM ;STORE THIS BRANCH NUMBER
MOVE U2,X4VAR ;X4VAR IS NUMBER OF SAVED BOARDS
CAMN U3,ME(U2) ;LOOK FOR PROPER TABLE ENTRY
JRST LHERE ;FOUND IT
SOJGE U2,.-2 ;KEEP LOOKING
TDZA U3,.+1 ;NO MATCH, SO VAR. POINTER ERROR?
777777740000
MOVE U2,X4VAR ;TRY AGAIN, THIS TIME WITH VAR. MASKED OUT
MOVE U1,ME(U2)
TRZ U1,740000
CAIN U3,(U1) ;ARE MOVE POINTERS EQUAL?
JRST LHERE ;YES, SO THIS IS THE ONE WE WANT, WE HOPE
SOJGE U2,.-4
MOVEI U1,[ASCIZ /BAD TRUNK /]
JRST FORGIV
LHERE: MOVE A,MA(U2) ;GET THE BOARD
MOVEM A,TA ;PUT IT IN PROPER PLACE
MOVE P,MP(U2)
MOVEM P,TP
MOVE K,MK(U2)
SETZM COLOR
TRZE K,400 ;BIT 27 OF K HAS COLOR
AOS COLOR
MOVEM K,TK
MOVE U1,MWL(U2)
HRRZM U1,WHOWON
HLRZM U1,WINLOS
MOVEI U1,11
PUSHJ PDP,MAGOUT
PUSHJ PDP,BOUT
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
; PUSHJ PDP,BDOUT
JRST BEGIN2 ;NOW START LEARNING
;NOMOV NOMOVE ENDERR LERR MAGOU2 MAGOU3 NOSTO STOP STOMP STTEST STBIT
NOMOV: MOVEI U1,[ASCIZ /"LMOVE" ERROR: NO LEGAL MOVES /]
JRST FORGIV
NOMOVE: MOVEI U1,[ASCIZ /"X" ERROR: NO LEGAL MOVES /]
JRST FORGIV
ENDERR: MOVEI U1,[ASCIZ /EOF FOUND, BUT NOT EXPECTED /]
JRST FORGIV
LERR: MOVE U2,U1
MOVEI U1,[ASCIZ /LEARNING OVERFLOW/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVE U1,U2
JRST X4VAR
MAGOU2: MOVE X1,U1
MAGOU3: IDIVI X1,12
JUMPE X1,MAGOU4
MOVEM U1,UEXYZ#
MOVE U1,X1
ADDI U1,"0"
PUSHJ PDP,MAGOUT
MOVE U1,UEXYZ
MAGOU4: ADDI U1,"0"
PUSHJ PDP,MAGOUT
POPJ PDP,
NOSTO: PUSHJ PDP,MAGIN ;GET FIRST NUMBER
JRST ENDERR ;EOF IS NOT AN ACCEPTABLE NUMBER
MOVE U2,U1
AOS X1,MOVNUM ;SPECIAL FOR CKLY
; PUSHJ PDP,MAGOU3 ;MAY 18
MOVE U1,MOVNUM
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U1,11
; PUSHJ PDP,MAGOUT
MOVE X1,U2
;25 PUSHJ PDP,TYO ; SPECIAL FOR CKLY
MOVE U1,U2
; PUSHJ PDP,MAGOUT
IMULI U2,12
PUSHJ PDP,MAGIN ;GET SECOND NUMBER
JRST ENDERR
MOVE X1,U1
;25 PUSHJ PDP,TYO ;SPECIAL FOR CKLY
; PUSHJ PDP,MAGOUT
ADD U1,U2
SUBI U1,1020 ;NORMALIZE FOR ASCII CODE
HRLZM U1,BOOKMS
PUSHJ PDP,OUTIN
MOVE U4,U1
MOVNS U1
MOVSI U3,400000
LSH U3,(U1) ;CREATE PROPER BIT POSITION
;25 MOVEI U1,[ASCIZ /-/]
;25 PUSHJ PDP,PRINT
MOVEI U1,55
; PUSHJ PDP,MAGOUT
PUSHJ PDP,MAGIN ;SAME ROUTINE AS ABOVE
JRST ENDERR
MOVE X1,U1
;25 PUSHJ PDP,TYO ;SPECIAL FOR CKLY
MOVE U2,U1
; PUSHJ PDP,MAGOUT
IMULI U2,12
PUSHJ PDP,MAGIN
JRST ENDERR
MOVE X1,U1
;25 PUSHJ PDP,TYO ;SPECIAL FOR CKLY
; PUSHJ PDP,MAGOUT
ADD U1,U2
SUBI U1,1020
HRRM U1,BOOKMS
PUSHJ PDP,OUTIN
SUB U4,U1 ;U4 IS MOVE DELTA
MOVM U5,U4
MOVNS U1
MOVSI U2,400000
LSH U2,(U1) ;U3-U2 IS MOVE
MOVEM U3,U2SS ;SOURCE BIT
MOVEM U4,U4S ;MOVE DELTA
IOR U2,U3
MOVEM U2,BKMOVE ;SAVE FOR ROTE
XOR U2,A
MOVEM U2,TP ;BOOK MOVE TO VERIFY
;25 MOVEI U1,[ASCIZ / /]
;25 PUSHJ PDP,PRINT
MOVEI U1,11
; PUSHJ PDP,MAGOUT
POPJ PDP,
STOP: Z ;STOP LOOK AHEAD WORD
STOMP: 0 ;CLEAN UP STOP
1 ;INDEXED BY X3
3
7
17
37
77
177
STTEST: 0 ;TO TEST OTHER SIDE EVAL
1 ;INDEXED BY X3
2
5
12
25
52
125
STBIT: 1 ;NORMAL MOVE INDICATORS FOR STOP WORD
2 ;INDEXED BY X3
4
10
20
40
100
200
;LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L13 L14 L14N
;MACRO USED INL25B
DEFINE TAB (T) <;TABLE COEF. MACRO
SETZ X1,
MOVE Z,T(X1)
PUSHJ PDP,TRJOUT
ADDI X1,1
CAIGE X1,5
JRST .-4>
LINEAR: MOVE A,[XWD -1,LRNPDL]
SKIPN LFLAG1
JRST L1
SKIPN RFLAG
JRST .+4
SETZM RFLAG
SETOM LFLAG5
SETOM LFLAG6
SKIPN LFLAG5
JRST L1
SETZ X4,
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /LINEAR TERM COEFFICIENTS/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
L1:
POP A,K ;GET TABLE START
JUMPE K,L21A ;LAST AT THIS LEVEL
POP A,Q ;GET RESULT START
MOVEI P,3 ;PHASE COUNTER
SKIPN LFLAG5
JRST L2
REPEAT 4,<
REPEAT 3,< XCT TLIST(X4)
ADDI X4,1
PUSHJ PDP,PRINT>
PUSHJ PDP,TERPRI
ADDI X4,17>
SUBI X4,105
L2: MOVEI U3,26 ;ENTRIES PER TABLE
MOVNM U3,U3S#
HRRM K,L5 ;FIX UP ADDRESSES
HRRM K,L5A
HRRM K,AC
HRRM K,AC1
HRRM K,L10
HRRM K,L10A
HRRM Q,L12
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,AC2
HRRM Q,C6
HRRM Q,C5
JRST SM ;TEMPORARY TEST OF NEW ROUTINE*****
MOVEI X1,12
SETZM TRMA(X1) ;CLEAR TABLES
SOJGE X1,.-1
MOVEI X1,2
L3: MOVEI X2,2
L4: MOVEI X3,4
L5: MOVE Z,(U3)
TDNN Z,[200000,,200000]
JRST .+4
LSH Z,-1 ;DIVIDE TO PREVENT OVERFLOW
AND Z,[177777,,177777]
L5A: MOVEM Z,(U3)
ASH Z,-1 ;TO HELP OVERFLOW PROBLEM
AND Z,[77777,,77777]
ADDM Z,TRMA(X1)
ADDM Z,TRMB(X2)
ADDM Z,TRMC(X3)
SUBI U3,1
SOJGE X3,L5
SOJGE X2,L4
SOJGE X1,L3
SKIPN LFLAG1
JRST .+10
MOVE Z,TRMA
ADD Z,TRMA+2
ADDB Z,TRMA+1 ;CAN USE TEMPORARILY
LSH Z,-22
ADD Z,TRMA+1
ANDI Z,777777
MOVEM Z,TRMAT#
SETZM TRMA+1 ;REQUIRED BY SYMETRY
SETZM TRMB+1
SETZM TRMC+2
MOVS Z,TRMA
ADDB Z,TRMA+2
MOVSM Z,TRMA ;THIS ADDS THESE CORRECTLY
SKIPE LFLAG1 ;DO WE PRINT
PUSHJ PDP,LRJOUT
MOVS Z,TRMB
ADDB Z,TRMB+2
MOVSM Z,TRMB
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVS Z,TRMC
ADDB Z,TRMC+4
MOVSM Z,TRMC
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVS Z,TRMC+1
ADDB Z,TRMC+3
MOVSM Z,TRMC+1
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVEI U3,26
SETZM CPOS# ;COUNT OF POSITIVE ENTRIES
SETZM CNEG# ;COUNT OF NEGATIVE ENTRIES
MOVEI X1,2
L7: MOVEI X2,2
L8: MOVEI X3,4
L9: SETZ Z,
SKIPN LFLAG2
JRST L10
ADD Z,TRMA(X1)
ADD Z,TRMB(X2)
ADD Z,TRMC(X3)
TRNN Z,400000 ;TEST FOR RIGHT OVERFLOW
TLNE Z,200000 ;TEST FOR LEFT OVERFLOW
PUSHJ PDP,LZ ;REPORT TROUBLE
L9A: ASH -6 ;DIVIDE BY 64
MOVE U1,WEIGHT
AND Z,LMSKW(U1) ;PURGE UNDERFLOW
L10: ADD Z,(U3)
SKIPN LFLAG7
JRST L10C
MOVN U1,U3
L10A: MOVS U2,(U1)
L10B: LSH U2,-1
MOVE U1,WEIGH1
AND U2,LMSKW(U1)
ADD Z,U2
L10C: HLRZ U1,Z
HRRZ U2,Z
JUMPE Z,L12
SUB U1,U2
LSH U2,1
ADD U2,U1
ASH U1,14 ;MULTIPLY BY 4096
MOVEM X2,X2S
IDIV U1,U2
MOVE X2,X2S
SKIPLE U1
AOS CPOS ;COUNT POS ENTRIES
SKIPGE U1
AOS CNEG ;COUNT NEG ENTRIES
SKIPE U1 ;DO NOT BOTHER WITH ZERO ENTRIES
ADD U1,CORADD
L12: MOVEM U1,(U3)
SUBI U3,1
SOJGE X3,L9
SOJGE X2,L8
SOJGE X1,L7
L13: MOVE X5,CPOS ;ENTRIES
ADDI X5,1 ;So that none will be missed
; LSH X5,-1 ;DIVIDE BY 2
IDIVI X5,3 ;NOW 7 BUCKETS
MOVEM U5,U5SAVE#
MOVEM X5,CPOS ;ENTRIES PER BUCKET
; MOVEI U5,2 ;LARGEST QUANTUM
MOVEI U5,3 ;LARGEST QUANTUM
SETZB U1,U2 ;SAFETY MEASURE
L14: MOVEI U3,26 ;TO INDEX TABLE
PUSHJ PDP,C2P ;FIND NEXT TO FIX
CAMN U5,U5SAVE
AOS CPOS
MOVE X5,CPOS ;RESET ENTRIES
SOJG U5,L14
MOVE X5,CNEG
ADDI X5,1 ;So that none will be missed
; LSH X5,-1
IDIVI X5,3 ;NOW 7 BUCKETS
MOVEM U5,U5SAVE
MOVEM X5,CNEG
; MOVEI U5,2
MOVEI U5,3
SETZB U1,U2
L14N: MOVEI U3,26
PUSHJ PDP,C2N
CAMN U5,U5SAVE
AOS CNEG
MOVE X5,CNEG
SOJG U5,L14N
SKIPE LFLAG5
PUSHJ PDP,TERPRI
ADDI K,SIGSIZ ;FOR NEXT PHASE
ADDI Q,SIGSIZ
SOJGE P,L2 ;COUNT PHASES
SKIPN LFLAG5
JRST L1
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
JRST L1 ;TO NEXT TABLE
;L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
L21A: SKIPN LFLAGT
JRST L21
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /FIRST-LEVEL TABLE COEF./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
L21: POP A,K
SKIPE LFLAG6
SETZM LFLAG5
JUMPLE K,L31 ;LAST AT THIS LEVEL
POP A,Q
JUMPLE Q,L31
MOVEI P,3 ;T0 COUNT PHASES
L22: SKIPN LFLAGT
JRST L22A
MOVEI X1,16
SETZM TABA(X1)
SOJGE X1,.-1
MOVEI X1,6
MOVEI X2,6
MOVEI X3,6
L22A: SETZM CPOS
SETZM CNEG
HRRM K,AC
HRRM K,ACZ
HRRM K,AC1
HRRM Q,AC2
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,C6
HRRM Q,C5
MOVEI U3,253 ;COUNT ENTRIES
MOVNM U3,U3S
JRST SM20 ;For full smoothing
AC: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1
AND Z,[177777177777]
ACZ: MOVEM Z,(U3)
SKIPN LFLAGT
JRST .+11
ADDM Z,TABA(X1)
ADDM Z,TABB(X2)
ADDM Z,TABC(X3)
SOJGE X3,.+5
SOJGE X2,.+3
SUBI X1,1
MOVEI X2,4
MOVEI X3,4
SKIPN LFLAG8
JRST AC3A
MOVN U1,U3
AC1: MOVS U2,(U1)
AC3: LSH U2,-1
MOVE U1,WEIGH2
AND U2,LMSKW(U1)
ADD Z,U2
AC3A: HLRZ U1,Z
HRRZ U2,Z
JUMPE Z,AC2
SUB U1,U2
LSH U2,1
ADD U2,U1
ASH U1,14 ;PLENTY OF SPREAD
MOVEM X2,X2SAC#
IDIV U1,U2
MOVE X2,X2SAC
SKIPLE U1
AOS CPOS
SKIPGE U1
AOS CNEG
SKIPE U1
ADD U1,CORADD
AC2: MOVEM U1,(U3)
SUBI U3,1
CAML U3,U3S
JRST AC
L23: MOVE X5,CPOS
ADDI X5,1 ;Allows one less in 1 bucket
IDIVI X5,7
MOVEM U5,U5SAVE# ;The remainder
MOVEM X5,CPOS
MOVEI U5,7
SETZB U1,U2 ;SAFETY MEASURE
L25B: MOVEI U3,253
PUSHJ PDP,C2P ;FIND LARGEST
CAMN U5,U5SAVE
AOS CPOS ;Time to start accounting for remainder
MOVE X5,CPOS ;RESET ENTRIES
SOJG U5,L25B
MOVE X5,CNEG
ADDI X5,1 ;Allows one less 1 in 1 bucket
IDIVI X5,7
MOVEM U5,U5SAVE# ;The remainder
MOVEM X5,CNEG
MOVEI U5,7
SETZB U1,U2
L25BN: MOVEI U3,253
PUSHJ PDP,C2N
CAMN U5,U5SAVE
AOS CNEG ;Time to start accounting for remainder
MOVE X5,CNEG
SOJG U5,L25BN
SKIPN LFLAGT
JRST L25C
MOVEM X1,X1SL25#
TAB TABA
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB TABB
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB TABC
MOVE X1,X1SL25
PUSHJ PDP,TERPRI
L25C: ADDI K,SIGSIZ
ADDI Q,SIGSIZ
SOJGE P,L22 ;TO NEXT PHASE
SKIPE LFLAGT
PUSHJ PDP,TERPRI
JRST L21 ;TO NEXT TABLE
;TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN
TRJOUT: HLRZ U1,Z
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
MOVEM X1,X1STJ#
MOVEM X2,X2STJ#
IMULI U1,310
IDIV U1,U2
TRNE U1,1
ADDI U1,2
ASH U1,-1
PUSHJ PDP,RJOUT1
MOVE X1,X1STJ
MOVE X2,X2STJ
POPJ PDP,
L31: MOVEI K,SIGLF ;START THIRD LEVEL
MOVEI Q,SIGTF
MOVEI P,3
L32: HRRM K,L34
HRRM K,L34Z
HRRM K,L34A
HRRM Q,L35
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,C5
HRRM Q,C6
MOVEI U3,160
MOVNM U3,U3S
SETZM CPOS
SETZM CNEG
JRST SM30 ;For full smoothing
L34: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1
AND Z,[177777177777]
L34Z: MOVEM Z,(U3)
SKIPN LFLAG9
JRST L34C
MOVN U1,U3
L34A: MOVS U2,(U1)
L34B: LSH U2,-1
MOVE U1,WEIGH3
AND U2,LMSKW(U1)
ADD Z,U2
L34C: HLRZ U1,Z
HLRZ U1,Z
JUMPE Z,L35
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
CAIGE U2,10
SETZ U1,
ASH U1,14 ;MULTIPLY BY 4096
IDIV U1,U2
SKIPLE U1
AOS CPOS
SKIPGE U1
AOS CNEG
SKIPE U1
ADD U1,CORADD
L35: MOVEM U1,(U3)
SUBI U3,1 ;TO NEXT PHASE
CAML U3,U3S
JRST L34
L33: SETZ X5,
MOVE U5,CPOS
SETZB U1,U2
L35B: MOVEI U3,160
PUSHJ PDP,C2P
SETZ X5,
SOJG U5,L35B
SETZ X5,
MOVE U5,CNEG
L35BN: MOVEI U3,160
PUSHJ PDP,C2N
SETZ X5,
SOJG U5,L35BN
ADDI K,SIGSIZ
ADDI Q,SIGSIZ
SOJGE P,L32
SETZM LFLAGT ;TERMINATE F COMMAND
POPJ PDP,
;C2P C3P C4P C5 C2N C3N C4N C6
C2P: MOVEI Z,10001 ;A LARGE NO.
MOVNM Z,LARGE#
C3P: MOVE Z,(U3)
CAMGE Z,CORADD
JRST C4P ;Already processed or negative
SUB Z,CORADD
JUMPLE Z,C4P
CAMG Z,LARGE
JRST .+3
MOVEM Z,LARGE ;SAVE IF LARGER
MOVE U1,U3 ;SAVE INDEX
C4P: SUBI U3,1
CAML U3,U3S
JRST C3P
SKIPLE LARGE
C5: MOVEM U5,(U1) ;QUANTIZE
SOSG X5
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP,
C2N: MOVEI Z,10001 ;A LARGE NO.
MOVEM Z,SMALL#
C3N: MOVE Z,(U3)
CAMGE Z,CORCOM
JRST C4N ;ALREADY PROCESSED
SUB Z,CORADD
JUMPGE Z,C4N
CAML Z,SMALL
JRST .+3
MOVEM Z,SMALL ;SAVE IF SMALLER
MOVE U2,U3 ;SAVE INDEX
C4N: SUBI U3,1
CAML U3,U3S
JRST C3N
SKIPGE SMALL
C6: MOVNM U5,(U2) ;QUANTIZE
SOSG X5
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP,
;CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
CORCOM: 300000000000
CORADD: 377000000000
WEIGH1: 1
WEIGH2: 1
WEIGH3: 1
WEIGHT: 6
LMSKW: 777777777777
377777377777
177777177777
077777077777
037777037777
017777017000
007777007777
003777003777
001777001777
000777000777
000377000377
000177000177
000077000077
000037000037
000017000017
000007000007
000003000003
000001000001
000000000000
Z
Z
SIGT22
SIGL22
SIGT21
SIGL21
Z
SIGT16
SIGL16
SIGT15
SIGL15
SIGT14
SIGL14
SIGT13
SIGL13
SIGT12
SIGL12
SIGT11
LRNPDL: SIGL11
;LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC
LRJOUT: HLRZ U1,Z
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
MOVEM X1,X1S
MOVEM X2,X2S
IMULI U1,310 ;MULTIPLY BY 200
SKIPN LFLAG5
JRST .+6
MOVEM U1,U1S#
IMULI U1,5
IDIV U1,TRMAT
PUSHJ PDP,RJOUT3
MOVE U1,U1S
IDIV U1,U2 ;WARNING DISTROYS X2
TRNE U1,1
ADDI U1,2
ASH U1,-1 ;DIVIDE BY 2
PUSHJ PDP,RJOUT2
SKIPN LFLAG5
JRST .+3
MOVE U1,U2
PUSHJ PDP,RJOUT
MOVE X1,X1S
MOVE X2,X2S
POPJ PDP,
LZ: MOVEM X2,X2S
MOVEM X1,X1S
MOVEI U1,[ASCIZ /TRM OVERFLOW /]
PUSHJ PDP,PRINT
MOVE U1,X1S
PUSHJ PDP,NUMOUT
MOVE U1,X2S
PUSHJ PDP,NUMOUT
MOVE U1,X3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE X1,X1S
MOVE X2,X2S
POPJ PDP,
RJOUT1: SETZ X2,
SKIPGE U1
SOS X2
MOVM Z,U1
JRST RJ2
RJOUT2: SETZ X2,
SKIPGE U1
SOS X2 ;SPACE FOR - SIGN
MOVM Z,U1
RJ2A: SKIPE LFLAG5
JRST RJ2
POPJ PDP,
RJOUT3: SETZ X2,
SKIPGE U1
SOS X2
MOVM Z,U1
JRST RJ4
LDEPTH: 0 ;LEARNING DEPTH CONTROL
KDEPTH: 3 ;SECOND DEPTH CONTROL NUMBER
LFLAG1: 1 ;NON-ZERO TO SAVE LINEARIZE
LFLAGZ: 1 ;LINEARIZE
LFLAG2: 1 ;TO LINEARIZE SIG
LFLAG3: Z ;TO LINEARIZE LRN
LFLAG5: Z
LFLAG6: Z
LFLAG7: 1
LFLAG8: 1
LFLAG9: 1
TRUNKF: 0
SMOOTH: Z
SMFAZE: 1
PRNVAR: 0
DORM: Z ;NOT 0 TO SAVE PLOT DATA
DSKTAP: Z ;0 FOR DSK AT START
TRMA: BLOCK 3
TRMB: BLOCK 3
TRMC: BLOCK 5
TABA: BLOCK 5
TABB: BLOCK 5
TABC: BLOCK 5
;TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL
TOTALS: MOVEI U1,[ASCIZ / TOTALS /]
PUSHJ PDP,PRINT
MOVE U1,LABELD+1
IDIVI U1,↑D1000
PUSHJ PDP,RJOUT1
MOVEI P,SIGSIZ*3
TOTAL2: MOVE U2,LABEL+2(P)
ADDM U2,TLOW
ADD U2,LABEL+4(P)
ADD U2,LABEL+3(P)
MOVE U1,LABEL+3(P)
ASH U1,-1
ADD U1,LABEL+2(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3
MOVE U1,LABEL+3(P)
ADDM U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1
MOVE U1,LABEL+4(P)
ADDM U1,THIGH
SUBI P,SIGSIZ
JUMPGE P,TOTAL2
MOVE U1,LABEL+1
PUSHJ PDP,RJOUT3
MOVE U2,TEQUAL
MOVE U1,U2
ADD U2,TLOW
ADD U2,THIGH
ASH U1,-1
ADD U1,TLOW
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3
MOVE U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SETZM THIGH
SETZM TLOW
SETZM TEQUAL
MOVEI P,SIGSIZ*3
MOVEI U1,[ASCIZ / MOVES /]
PUSHJ PDP,PRINT
MOVE U1,LABEL+2(P)
ADD U1,LABEL+3(P)
ADD U1,LABEL+4(P)
PUSHJ PDP,RJOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SUBI P,SIGSIZ
JUMPGE P,.-6
PUSHJ PDP,TERPRI
POPJ PDP,
;SUBROUTINE TO SYMETRICALLY SMOOTH LEARNING DATA
SYM: MOVE A,[XWD -1,SYMPDL]
SYM0: POP A,K
JUMPE K,SYM10
POP A,U2
MOVEI P,3
SYM1: HRRM K,SYM3
HRRM K,SYM4
HRRM K,SYM5
HRRM K,SYM6
MOVE U3,U2
SYM2: MOVN U1,U3
SYM3: MOVS Z,(U1)
SYM4: ADD Z,(U3)
LSH Z,-1
AND Z,LMSKW+1
SYM5: MOVEM Z,(U3)
SYM6: MOVSM Z,(U1)
SUBI U3,1
JUMPGE U3,SYM2
ADDI K,SIGSIZ
SOJGE P,SYM1
JRST SYM0
SYM10: POPJ PDP,
Z
Z
160
SIGLF
253
SIGL22
253
SIGL21
26
SIGL16
26
SIGL15
26
SIGL14
26
SIGL13
26
SIGL12
26
SYMPDL: SIGL11
;FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT
FACTOR: SETZB U2,U3
MOVEI U4,LRN11
FACTO2: MOVEI U1,SIGSIZ-6 ;ALLOW FOR LABEL OF 5
HRRM U4,.+2
HRRM U4,.+3
HLRZ Z,LRN11(U1)
ADD U2,Z
HRRZ Z,LRN11(U1)
ADD U3,Z
SOJGE U1,.-4
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST FACTO2
IMULI U3,144
IDIV U3,U2
SKIPN TRUNKF
JRST .+6
MOVEI U1,[ASCIZ /FACTOR IS /]
PUSHJ PDP,PRINT
MOVE U1,U3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE U4,LRN11
FACTO3: MOVEI U1,SIGSIZ-6
HRRM U4,.+2
HRRM U4,.+4
HLLZ U2,LRN11(U1)
IDIVI U2,144
IMUL U2,U3
HLLM U2,LRN11(U1)
SOJGE U1,.-4
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST FACTO3
POPJ PDP,
DIVIDE: MOVEI U4,LRN11
MOVE U2,DIVMSK
MOVEI U1,SIGSIZ-6
HRRM U4,.+2
HRRM U4,.+5
MOVE Z,LRN11(U1)
LSH Z,-1
AND Z,U2
TDNE Z,[777000777000] ;DO NOTHING IF SMALL
MOVEM Z,LRN11(U1)
SOJGE U1,.-5
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST .-13
MOVEI U1,[ASCIZ /TABLES HALVED/]
PUSHJ PDP,PRINT
JRST TERPRI
DIVMSK: 177777177777
DIVIDT: MOVE U2,[200000400000]
MOVEI U4,LRN11
MOVEI U1,SIGSIZ-6
HRRM U4,.+1
MOVE Z,LRN11(U1)
AND Z,U2
JUMPN Z,.+6
SOJGE U1,.-3
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST .-10
POPJ PDP,
MOVEI U1,[ASCIZ /TIME TO DIVIDE/]
PUSHJ PDP,PRINT
JRST TERPRI
;LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20
;TYPING OF LEARN COMMAND WILL SET LFLAG AND
;GO TO BEGIN
;TYPING OF LEARN, ZERO, TABLES WILL ZERO ALL
;LEARNING TABLES AND BRANCH TO ABOVE COMMAND
;INTERPRETATION.
LZERO: SETZM LABELD
MOVE Z,[XWD LABELD,LABELD+1]
BLT Z,LABELD+SIGSIZ*4-1
POPJ PDP,
LZER2: MOVEI U1,LRN21+SIGSIZ*3
MOVEI U2,LABELD+SIGSIZ*4-1
MOVEI U3,3
LZER2A: HRRZI Z,1(U1)
HRL Z,U1
SETZM @U1
BLT Z,@U2
SUBI U1,SIGSIZ
SUBI U2,SIGSIZ
SOJGE U3,LZER2A
POPJ PDP,
LZER3: MOVEI U1,LRNF+SIGSIZ*3
MOVEI U2,LABELD+SIGSIZ*4-1
MOVEI U3,3
LZER3A: HRRZI Z,1(U1)
HRL Z,U1
SETZM @U1
BLT Z,@U2
SUBI U1,SIGSIZ
SUBI U2,SIGSIZ
SOJGE U3,LZER2A
POPJ PDP,
ZL: MOVEI U5,4
SETZM LABELD(U5)
SETZM LABEL(U5)
SETZM LABEL+SIGSIZ(U5)
SETZM LABEL+SIGSIZ*2(U5)
SETZM LABEL+SIGSIZ*3(U5)
SOJGE U5,.-5
POPJ PDP,
;THIS SHOULD BE FIXED TO WRITE OUT A FILE.*********
LC: POPJ PDP, ;3 APR 80 FORM BYPASS
;LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS
LC7SAV: Z ;TO SAVE ASCIZ
LC7SAE: Z ;DITTO
LASCIZ: ASCIZ /00/
ASCIZ /01/
ASCIZ /02/
ASCIZ /03/
ASCIZ /04/
ASCIZ /05/
ASCIZ /06/
ASCIZ /07/
ASCIZ /08/
ASCIZ /09/
ASCIZ /10/
ASCIZ /11/
ASCIZ /12/
ASCIZ /13/
ASCIZ /14/
ASCIZ /15/
ASCIZ /16/
TTNMVS: Z ;TOTAL NUMBER OF 2 MOVE BOARDS
TTNBDS: Z ;TOTAL NUMBER OF BOARDS
TNOBDS: Z ;BOARDS FOR THIS FILE
TNOMVS: Z ;NUMBER OF TWO MOVE BOARDS
;EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG
SUBTTL MACROS FOR SIGNATURE TABLES
U1SAVE: 0
U2SAVE: 0
X1SAVE: 0
DEFINE MAC1 (S) <;OUTER MACRO
SETZ U1,
MAC2 \<3*S-2>
IMULI U1,7
MAC2 \<3*S-1>
IMULI U1,7
MAC2 \<3*S>
ADD U1,PHASAD
SKIPE LFLAG
ADDM X1,SIGL2'S(U1)
ADD U5,SIGT2'S(U1)>
DEFINE MAC2 (SC) <;CENTRAL MACRO
MAC3 1
MOVE U2,Q
IMULI U2,3
MAC3 1
ADD U2,Q
IMULI U2,5
MAC3 2
ADD U2,Q
ADD U2,PHASAD
SKIPN LFLAG
JRST .+5
MOVE Z,SIGT1'SC(U2)
MOVE U3,SI
MOVEM Z,SIGZ1'SC(U3)
ADDM X1,SIGL1'SC(U2)
ADD U1,SIGT1'SC(U2)>
DEFINE MAC3 (C) <;INNER MACRO
SETZB Q,P
LSHC Q,4
LSHC P,4
SUB Q,P
CAILE Q,C
MOVEI Q,C
CAMGE Q,NEG+C
MOVNI Q,C>
EVA: POPJ PDP, ; CKLY
;SIGSIZ=1356 ;SIZE OF SIG+LABEL IS 750
SIGSIZ=2406 ;SIZE OF SIG+LABEL IS 1286
PHASAD: Z
PHASES: 0
SIGSIZ
SIGSIZ*2
SIGSIZ*3
NEG: 0 ;NEGATION TABLE
-1
-2
-3
-4
-5
-6
-7
-10
;DSAVE RSAVE
DSAVE: MOVEI U1,[ASCIZ /DSAVE HERE/]
PUSHJ PDP,PRINT
POPJ PDP, ;3 APR 80 FORM BYPASS
RSAVE: MOVEI U1,[ASCIZ /RSAVE HERE/]
PUSHJ PDP,PRINT
POPJ PDP, ;3 APR 80 FORM BYPASS
;DFILL DFILL2 DSKERR DATA RDATA
DFILL: POPJ PDP, ;3 APR 80 FORM BYPASS
DATA: SIXBIT /LEARN/
SIXBIT /ING/
055000000000
SIXBIT / 1ALS/
RDATA: SIXBIT /LEARN/
SIXBIT /DAT/
055000000000
SIXBIT / 1ALS/
;MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF
MTAOUT: IOWD SIGSIZ*4,LABELD
Z
SIGDAT: SIXBIT /SIGT0/
SIXBIT /DAT/
055000000000
SIXBIT / 1ALS/
SIGT0: IOWD SIGSIZ,LABEL
Z
SIGT1: IOWD SIGSIZ,LABEL+SIGSIZ
Z
SIGT2: IOWD SIGSIZ,LABEL+SIGSIZ*2
Z
SIGT3: IOWD SIGSIZ,LABEL+SIGSIZ*3
Z
SUBTTL DATA FOR EVALUATION
CFZ1: Z ;TEMPORARY STORAGE
CFZ2: Z
CFZ3: Z
CFZ4: Z
CFZ5: Z
CFZ10: Z ;BACKUP LOCATION FOR PASK
CFZ11: Z ;BACKUP LOCATION FOR ACTK
CEMPTY: Z ;TEMPORARY LOCATION FOR EMPTY, ET.AL.
LABEL: BLOCK 5
EVAL11: BLOCK 26 ;SIGNATURE TABLES
SIGT11: BLOCK 27 ;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12: BLOCK 26
SIGT12: BLOCK 27
EVAL13: BLOCK 26
SIGT13: BLOCK 27
EVAL14: BLOCK 26
SIGT14: BLOCK 27
EVAL15: BLOCK 26
SIGT15: BLOCK 27
EVAL16: BLOCK 26
SIGT16: BLOCK 27
EVAL21: BLOCK 253
SIGT21: BLOCK 254
EVAL22: BLOCK 253
SIGT22: BLOCK 254
EVALF: BLOCK 160
SIGTF: BLOCK 161
BLOCK SIGSIZ*3 ;SPACE FOR OTHER PHASES
LABELD: BLOCK 5 ;TO BALANCE LABEL
LRN11: BLOCK 26 ;LEARNING TABLES
SIGL11: BLOCK 27
LRN12: BLOCK 26
SIGL12: BLOCK 27
LRN13: BLOCK 26
SIGL13: BLOCK 27
LRN14: BLOCK 26
SIGL14: BLOCK 27
LRN15: BLOCK 26
SIGL15: BLOCK 27
LRN16: BLOCK 26
SIGL16: BLOCK 27
LRN21: BLOCK 253
SIGL21: BLOCK 254
LRN22: BLOCK 253
SIGL22: BLOCK 254
LRNF: BLOCK 160
SIGLF: BLOCK 161
BLOCK SIGSIZ*3 ;SPACE FOR OTHER PHASES
LABEL1=LABEL+SIGSIZ
LABEL2=LABEL+SIGSIZ*2
LABEL3=LABEL+SIGSIZ*3
LABLD1=LABELD+SIGSIZ
LABLD2=LABELD+SIGSIZ*2
LABLD3=LABELD+SIGSIZ*3
;BLOWUP INPSIZ BOKSIZ INPMAX INPCNT INPKNK SAVMOV SAVM0 SAVM1 SAVMZ PADMOV PADMO2 INDEXS INDEXX INDEXA INDEXP INDEXK INDEXF INDEXC INDEXL INDEXV INDXV2 SIXADD SIXPT2 SIXPT3 SIXPNT SIXOUT
;The general scheme is to maintain an INDEX table relating the initial entries in
;files of saved board and move data with the file names via an index value to be
;used with the INDEX table. These entries are label-sorted so as to minimize the
;amount of file shifting that will be necessary when the table of BOOKM's is
;emptied into the files.
;INPSIZ is 10240 allowing 2048 king records or 2560 entries of no-king records
;on DMPFIL, however, if INPCNT>8960 then the file is split into two halves so that
;the actual size of the files will vary from 4480 to 8960
BLOWUP==↑D10 ;RELATIVE SIZE OF INPSIZ IN L AND P
INPSIZ==↑D1024*BLOWUP ;INPSIZ=↑D1020 IN CKP
BOKSIZ=↑D128 ;2**N FOR CONVENIENCE (INCREASE TO 512 AS SOON AS TESTED)
INPMAX==↑D896*BLOWUP ;MAX SIZE ALLOWED ON DMPFIL
INPCNT: Z ;Current count of words occupied
INPKNK: Z ;King or no-king record for filein
;When BOOK file is filled go to MERGE then to INSERT
;In INSERT at INS1A if INPCNT<INPMAX return to SAVMOV else go to DIVFI
SAVMOV:
AOS X3,BINDEX ;BINDEX used to index BOOK data
;25 MOVEI U1,[ASCIZ /IND=/]
;25 PUSHJ PDP,PRINT
MOVE A,PLA
MOVE P,PLP
MOVE K,PLK
MOVEI Z,1
SKIPN K
AOS Z ;ADD 1 IF NO KINGS ON BOARD
SKIPE COLOR ;COLOR HAS ALREADY BEEN CHANGED
ADDI Z,2 ;ADD 2 IF BLACK TO MOVE
SETZ U2,
SAVM0: CAMGE Z,INDEXX+1(U2) ;Initial classification on kings and color
AOJA U2,SAVM0 ;in decreasing order
CAME Z,INDEXX+1(U2)
JRST SAVM1
CAMGE A,INDEXA+1(U2) ;then on A again in decreasing order
AOJA U2,SAVM0
CAME A,INDEXA+1(U2)
JRST SAVM1
CAMGE P,INDEXP+1(U2) ; then on P
AOJA U2,SAVM0
CAME P,INDEXP+1(U2)
JRST SAVM1
CAMGE K,INDEXK+1(U2) ;and finally on K (this may never be necessary)
AOJA U2,SAVM0
CAMG K,INDEXK+1(U2)
AOJA U2,SAVM0
SAVM1: HRLZS U2 ;Save index value as applied to the INDEX table
HRR U2,X3
MOVEM U2,BOOKI(X3) ;Index to INDEXM file in left and BINDEX in right
;25 HLRZ U1,U2
;25 PUSHJ PDP,NUMOUT
;25 MOVEI U1,[ASCIZ / /]
;25 PUSHJ PDP,PRINT
;25 MOVEI U1,[ASCIZ /
;25/]
;25 PUSHJ PDP,PRINT
MOVEM A,BOOKA(X3)
MOVEM P,BOOKP(X3)
MOVEM K,BOOKK(X3)
HLRZ Z,BOOKMS
LSH Z,6
IOR Z,BOOKMS
HRRZM Z,BOOKM(X3) ;SAVE MOVE
MOVE U2,[POINT 7,BOOKM(X3)]
MOVE U1,TRNKNO
IDPB U1,U2
MOVE U1,VARNAM
IDPB U1,U2
MOVE U1,MOVNUM
IDPB U1,U2
; MOVE Z,TRNKNO ;GET TRUNK NO
; LSH Z,9
; ADD Z,MOVNUM ;ADD MOVE NUMBER
; HRLM Z,BOOKM(X3) ;Save TRUNK and MOVNUM in left half of BOOKM(X3)
MOVE Z,VARNUM ;add var. #'s (assume not more than 5#'s)
MOVEM Z,BOOKV(X3) ;source location
CAIGE X3,BOKSIZ-1
POPJ PDP,
SAVMZ: MOVEM X2,X2MS# ;SAVE VALUES
MOVEM X4,X4MS#
PUSHJ PDP,MERGE
MOVE X2,X2MS ;RESTORE FORMER VALUES
MOVE X4,X4MS
POPJ PDP,
PADMOV: SETZB U2,Z
CAMGE Z,INDEXX(U2)
AOJA U2,.-1
MOVEI U1,[ASCIZ / AT PADMOV U2=/]
PUSHJ PDP,PRINT
MOVE U1,U2
PUSHJ PDP,NUMOUT
HRLZS U2
PADMO2: AOS X3,BINDEX
HRR U2,X3
MOVEM U2,BOOKI(X3) ;Pad out BOOK so merge will work
SETZM BOOKA(X3)
CAIGE X3,BOKSIZ-1
JRST PADMO2
MOVEI U1,[ASCIZ / PADMOV COMPLETE /]
PUSHJ PDP,PRINT
JRST SAVMZ
INDEXS==↑D170 ;Maximum number of files
INDEXX: 4 ;Black without kings
3 ;Black with kings
2 ;White without kings
1 ;White with kings
0 ;PADMOV and XEROX signal
BLOCK INDEXS-1 ;4=BM 3=WM 2=BK 1=WK 0=time to stop
INDEXA: 377777777777 ;dummy to MARK BR0001 file
377777777777 ;dummy to start BR0002 file
377777777777
377777777777
BLOCK INDEXS ,ACTIVE MEN
INDEXP: 377777777777
377777777777
377777777777
377777777777
BLOCK INDEXS ;PASSIVE
INDEXK: 377777777777
377777777777
377777777777
377777777777
BLOCK INDEXS ;KINGS
INDEXF: SIXBIT /BR0001/
SIXBIT /BR0002/
SIXBIT /BR0003/
SIXBIT /BR0004/
Z
BLOCK INDEXS-1 ;Additional file names in SIXBIT
INDEXC: Z ;Current size of this file
Z
Z
Z
BLOCK INDEXS
BLOCK 4 ;GUARD
INDEXL: SIXBIT /BR0004/ ;The last used file name
INDEXV: Z ;Index table index for FILEIN
INDXV2: Z ;INDEX table index value (corresponding to FILEI2)
SIXADD: MOVEI U5,5
SIXPT2: LDB X1,SIXPNT(U5)
AOS X1
CAIG X1,[SIXBIT / 9/]
JRST SIXPT3
MOVEI X1,[SIXBIT / 0/]
DPB X1,SIXPNT(U5)
SOJGE U5,SIXPT2
SIXPT3: DPB X1,SIXPNT(U5)
POPJ PDP,
SIXPNT: POINT 6,U1,5
POINT 6,U1,11
POINT 6,U1,17
POINT 6,U1,23
POINT 6,U1,29
POINT 6,U1,35
SIXOUT: SETZ X1,
LSHC X1,6
PUSHJ PDP,TYPE
SETZ X1,
LSHC X1,6
PUSHJ PDP,TYPE
SETZ X1,
LSHC X1,6
PUSHJ PDP,TYPE
SETZ X1,
LSHC X1,6
PUSHJ PDP,TYPE
SETZ X1,
LSHC X1,6
PUSHJ PDP,TYPE
SETZ X1,
LSHC X1,6
PUSHJ PDP,TYPE
POPJ PDP,
;MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX
MERGE: MOVMS PLACE
SETOM BINDEX
MOVEI U1,[ASCIZ /
Merge
/]
PUSHJ PDP,PRINT
MOVEI Z,1
MOVEI X3,BOKSIZ
MER0: SUB X3,Z
SKIPL PLACE
JRST .+3
CAIG X3,BOKSIZ
JRST MER8
JUMPLE X3,MER8 ;25 Was JUMPLE X3,MER8
MOVE U1,BOOKI(X3)
MOVE U3,BOOKI-1(X3) ;25
HLLZ X4,U1
HLLZ X5,U3
CAMN X4,X5 ;25
JRST .+4 ;25
CAMG X4,X5 ;25
JRST MER6 ;25
JRST MER1 ;25
HRRZ X4,U1
HRRZ X5,U3
JUMPL X4,MER0A
JUMPGE X5,MER0B
MER0A: CAMG U1,U3
JRST MER6
JRST MER1
MER0B: CAIGE X4,BOKSIZ
CAIL X5,BOKSIZ
JRST MER0A
MOVE U5,BOOKA(X4) ;25
CAMN U5,BOOKA(X5) ;25
JRST .+4 ;25
CAML U5,BOOKA(X5) ;25
JRST MER6 ;25
JRST MER1 ;25
MOVE U5,BOOKP(X4) ;25
CAML U5,BOOKP(X5) ;25
JRST MER6 ;25
MER1: MOVE X1,X3
SUB X1,Z
MOVEM X3,STOP1#
MOVEM X3,STOP2#
ADDM Z,STOP2
MOVE U4,X1
ADD U4,PLACE
MER2: MOVE U3,BOOKI(X1) ;25
HLLZ X4,U1
HLLZ X5,U3
CAMN X4,X5 ;25
JRST .+4 ;25
CAMG X4,X5 ;25
JRST MER2A ;25
JRST MER2B ;25
HRRZ X4,U1
HRRZ X5,U3
JUMPL X4,MRE2C
JUMPGE X5,MER2D
MRE2C: CAMG U1,U3
JRST MER2A
JRST MER2B
MER2D: CAIGE X4,BOKSIZ
CAIL X5,BOKSIZ
JRST MRE2C
MOVE U5,BOOKA(X4) ;25
CAMN U5,BOOKA(X5) ;25
JRST .+4 ;25
CAML U5,BOOKA(X5) ;25
JRST MER2A ;25
JRST MER2B ;25
MOVE U5,BOOKP(X4) ;25
CAML U5,BOOKP(X5) ;25
MER2A: AOSA X1
MER2B: AOSA X3
MOVE U1,BOOKI-1(X1)
MOVEM U1,BOOKI(U4)
MOVE U1,BOOKI(X3)
CAML X1,STOP1
AOJA U4,MER4
CAMGE X3,STOP2
AOJA U4,MER2
MER3: ADDI U4,1
MOVE U1,BOOKI(X1)
MOVEM U1,BOOKI(U4)
ADDI X1,1
CAML X1,STOP1
JRST MER5
AOJA U4,MER3+1
MER4: MOVE U1,BOOKI(X3)
MOVEM U1,BOOKI(U4)
ADDI X3,1
CAMGE X3,STOP2
AOJA U4,MER4
MER5: MOVE X3,STOP1
SUB X3,Z
JRST MER0
MER6: MOVEI U2,BOOKI(X3)
SUB U2,Z
HRLS U2
ADD U2,PLACE
HRRM U2,MER7
ADDM Z,MER7
ADDM Z,MER7
SOS MER7
MER7: BLT U2,
SUB X3,Z
JRST MER0
MER8: LSH Z,1
CAIL Z,BOKSIZ
JRST INSERT
MOVEI X3,BOKSIZ
SKIPL PLACE
ADD X3,PLACE
MOVNS PLACE
JRST MER0
PLACE: BOKSIZ
BINDEX: -1 ;SAVMOV COUNT
;INSERT INS2 INS1A INS4B INS4C INS4D INS4E INS4F INS5 INSX INS6
INSERT:
MOVEI U1,[ASCIZ / INSERT /]
PUSHJ PDP,PRINT
; PUSHJ PDP,INSZZ ;Temporary to test dump mode
MOVEI X4,BOKSIZ-1
INS2: JUMPL X4,INSX+2 ;END OF INSERT
HLRZ U1,BOOKI(X4) ;Get index to INDEXF table
SKIPL PLACE ;IS THIS THE RIGHT ONE?****** ;M25 WAS SKIPL
HLRZ U1,BOOKI+BOKSIZ(X4);Get index to INDEF table
MOVEM U1,INDXV2 ;Save new INDEX table index value
MOVE U2,INDEXF(U1) ;and retrieve the correct file name
CAMN U2,FILEIN ;CORRECT FILE ALREADY IN CORE?
JRST INS1A ;YES
MOVEM U2,FILEI2 ;SAVE NEW VALUE
SKIPE FILCHG# ;HAS FILE BEEN CHANGED
PUSHJ PDP,DMPFIL ;YES, SO DUMP CURRENT FILE
MOVE U1,FILEI2 ;U2 changed in DMPFIL
PUSHJ PDP,SIXOUT
MOVE U1,FILEI2 ;just in case we have overwritten
JUMPN U1,INS2AA
POPJ PDP,
INS2AA: PUSHJ PDP,GETFIL ;AND GET NEW FILE
JRST .+1
MOVE U1,INDXV2
MOVEM U1,INDEXV
MOVE U2,INDEXC(U1)
MOVEM U2,INPCNT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /INPA:/]
PUSHJ PDP,PRINT
MOVE U1,INPA
PUSHJ PDP,OCTOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
MOVE U1,INPA+1
PUSHJ PDP,OCTOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
MOVE U1,INPA+2
PUSHJ PDP,OCTOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
MOVE U1,INPA+3
PUSHJ PDP,OCTOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
MOVE U1,INPA+4
PUSHJ PDP,OCTOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
MOVE U1,INPA+5
PUSHJ PDP,OCTOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
MOVE U1,INPA+6
PUSHJ PDP,OCTOUT
INS1A: HRRZ X3,BOOKI(X4) ;GET INDEX
SKIPL PLACE ;BUT GET THE RIGHT ONE! ;M25 WAS SKIPL
HRRZ X3,BOOKI+BOKSIZ(X4) ;INDICES UNORDERED SINCE LABEL SORT
; MOVEI U1,[ASCIZ / X3=/]
; PUSHJ PDP,PRINT
; MOVE U1,X3
; PUSHJ PDP,NUMOUT
; MOVEI U1,[ASCIZ / BOOKA=0 /]
; SKIPN BOOKA(X3)
; PUSHJ PDP,PRINT
SKIPN U2,BOOKA(X3)
; POPJ PDP,
SOJA X4,INS2 ;25 THIS MAY FIX IT , SORT OF BUT IT DOESN'T
MOVE U3,BOOKP(X3)
MOVE U4,BOOKK(X3)
PUSHJ PDP,FINDX1 ;FIND LINE LOCATION
; JUMPN X1,INS1AZ
; PUSHJ PDP,TERPRI
; MOVE U1,BOOKA(X3)
; PUSHJ PDP,OCTOUT
; MOVEI U1,[ASCIZ / /]
; PUSHJ PDP,PRINT
; MOVE U1,BOOKP(X3)
; PUSHJ PDP,OCTOUT
; MOVEI U1,[ASCIZ / /]
; PUSHJ PDP,PRINT
; MOVE U1,BOOKM(X3)
; PUSHJ PDP,OCTOUT
; PUSHJ PDP,TERPRI
INS1AZ: MOVEI U1,[ASCIZ / X1=/]
PUSHJ PDP,PRINT
MOVE U1,X1
PUSHJ PDP,NUMOUT
INS4B: CAIL X1,INPSIZ
JRST INSZ ;WOOPS FILE MUST BE FULL
MOVE U4,INPCNT
MOVE Z,BOOKK(X3)
JUMPE Z,INS4E
INS4C: SKIPN INPA(X1) ;IS DESIGNATED LINE EMPTY
JRST INS5 ;YES
INS4D: CAMGE U4,X1
JRST INS5
MOVE U3,INPA(U4)
MOVEM U3,INPA+5(U4)
MOVE U3,INPP(U4)
MOVEM U3,INPP+5(U4)
MOVE U3,INPM(U4)
MOVEM U3,INPM+5(U4)
MOVE U3,INPV(U4)
MOVEM U3,INPV+5(U4)
MOVE U3,INPK(U4)
MOVEM U3,INPK+5(U4)
SUBI U4,5
JRST INS4D
INS4E: SKIPN INPA(X1)
JRST INS5
INS4F: CAMGE U4,X1
JRST INS5
MOVE U3,INPA(U4)
MOVEM U3,INPA+4(U4)
MOVE U3,INPP(U4)
MOVEM U3,INPP+4(U4)
MOVE U3,INPM(U4)
MOVEM U3,INPM+4(U4)
MOVE U3,INPV(U4)
MOVEM U3,INPV+4(U4)
SUBI U4,4
JRST INS4F
INS5: MOVE U2,BOOKA(X3)
MOVEM U2,INPA(X1)
MOVE U2,BOOKP(X3)
MOVEM U2,INPP(X1)
MOVE U2,BOOKM(X3)
MOVEM U2,INPM(X1)
MOVE U2,BOOKV(X3)
MOVEM U2,INPV(X1)
JUMPE Z,.+3
MOVE U2,BOOKK(X3)
MOVEM U2,INPK(X1)
INSX: AOS FILCHG ;FILE CHANGE COUNT
SOJGE X4,INS2
POPJ PDP, ;We may want this out later********
INS6: SKIPE FILCHG ;HAS FILE BEEN CHANGED
PUSHJ PDP,DMPFIL ;YES SO DUMP
SETZM FILEIN ;FORCE NEW FILE IN
MOVEI U1,[ASCIZ /BSAVED./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST INSZZ
;INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR
INSZ: MOVEI U1,[ASCIZ /UNABLE TO ADD TO FILE /]
PUSHJ PDP,PRINT
MOVE U1,FILEIN
PUSHJ PDP,SIXOUT
PUSHJ PDP,TERPRI
JRST INSX+1 ;NO CHANGE TO REPORT
INSZZ:
MOVEI U1,[ASCIZ /INSZZ CALLED /]
PUSHJ PDP,PRINT
; POPJ PDP, ;3 APR 80 FORM BYPASS
INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,WHERIN+1
; MOVE U2,[055000000000]
; MOVEM U2,WHERIN+2
SETZM WHERIN+2
MOVE U2,[SIXBIT / 1ALS/]
MOVEM U2,WHERIN+3
ENTER 12,WHERIN
HALT
OUTPUT 12,WHRINS
RELEAS 12,
POPJ PDP,
WHERIN: SIXBIT /DIREC3/
SIXBIT /CHK/
055000000000
SIXBIT / 1ALS/
WHERES=↑D1024 ;MUST BE SAME AS IN CKB
WHRINS: IOWD WHERES,INDEXX
Z
GETFIL: MOVEI U1,[ASCIZ / GETFIL /]
PUSHJ PDP,PRINT
; POPJ PDP, ;3 APR 80 FORM BYPASS
SETZM INPCNT
MOVEI U2,INPSIZ-1
SETZM INPA(U2)
SOJGE U2,.-1
SETZM FILCHG
MOVNI U2,INPSIZ
HRLZM U2,BKMIN
MOVEI U1,INPA
HRRM U1,BKMIN
MOVE U1,FILEI2 ;U1 MAY HAVE BEEN CHANGED
MOVEM U1,FILEIN ;NOW ACKNOWLEDGE NEW FILE
MOVEM U1,DSKBKM
PUSHJ PDP,SIXOUT
INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U2,[SIXBIT /DAT/]
MOVEM U2,DSKBKM+1
; MOVE U2,[055000000000]
; MOVEM U2,DSKBKM+2
SETZM DSKBKM+2
MOVE U2,[SIXBIT / 1ALS/]
MOVEM U2,DSKBKM+3
SETZM INPCNT
LOOKUP 12,DSKBKM
JRST GETFIR
INPUT 12,BKMIN
GETFIR: RELEAS 12,
POPJ PDP,
;DMPFIL DMPFIN DMPFIY DMPFIZ DMPDMP DMPFI3 DSKBKD DSKBKM BKMIN BKMIN2 INPA INPP INPM INPV INPK BOOKA BOOKP BOOKK BOOKM BOOKV BOOKI BOOKMS FILEIN FILEI2 FILEI3 INBITS
DMPFIL: MOVEI U1,[ASCIZ / DMPFIL /]
PUSHJ PDP,PRINT
MOVE U2,FILEIN
MOVN U3,INPCNT ;TO PUT INTO AN IOWD
HRLM U3,BKMIN
MOVE U3,INPCNT
MOVE U1,INDEXV
MOVEM U3,INDEXC(U1) ;Save the size of this file
MOVEM U2,DSKBKM
MOVE U1,U2
PUSHJ PDP,SIXOUT
MOVEI U1,[ASCIZ / IOWD=/]
PUSHJ PDP,PRINT
MOVN U1,INPCNT
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
HRRZ U1,BKMIN
PUSHJ PDP,NUMOUT
INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U2,[SIXBIT /DAT/]
MOVEM U2,DSKBKM+1
; MOVE U2,[055000000000]
; MOVEM U2,DSKBKM+2
SETZM DSKBKM+2
MOVE U2,[SIXBIT / 1ALS/]
MOVEM U2,DSKBKM+3
ENTER 12,DSKBKM
HALT
OUTPUT 12,BKMIN
RELEAS 12,
POPJ PDP,
DSKBKD: Z ;TEMPORARY SAVE OF DSKBKM FOR DMPFIL
DSKBKM: SIXBIT /BD0001/
SIXBIT /DAT/
055000000000
SIXBIT / 1ALS/
Z
BKMIN: IOWD INPSIZ,INPA
Z
Z
BKMIN2: IOWD INPSIZ,INPA
Z
Z
377777777777 ;INPA-5 guard
377777777777 ;INPA-4 guard
377777777777
377777777777
377777777777
INPA: BLOCK INPSIZ ;Now set at 1024*10
INPP=INPA+1
INPM=INPA+2
INPV=INPA+3
INPK=INPA+4
377777777777 ;BOOKA-1 GUARD
BLOCK 20
BOOKA: BLOCK BOKSIZ+20 ;BOKSIZ = 512
BOOKP: BLOCK BOKSIZ+20
BOOKK: BLOCK BOKSIZ+20
BOOKM: BLOCK BOKSIZ+20 ;Trunk number, move number and move
BOOKV: BLOCK BOKSIZ+20 ;Variation number for move
BOOKI: BLOCK BOKSIZ*2+40 ;IND,SERIAL# INITIALLY THEN SORTED
BOOKMS: Z ;Temp save for book move; from in left, to in right half
FILEIN: Z ;FILE ACTUALLY IN MEMORY
FILEI2: Z ;TEMPORARY STORE for new FILEIN
FILEI3: Z ;Second filename when splitting a file
INBITS: LSHC X2,-3
LSH X2,10
LSHC X2,1
LSH X2,10
LSHC X2,1
LSH X2,10
LSHC X2,1
LSH X2,10
POPJ PDP,
;BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4
BOLAND: PUSHJ PDP,MAGIN
HALT
MOVE X1,U1
SKIPE TRUNKF ;DO WE PRINT
PUSHJ PDP,TYO
CAIN U1,11 ;LOOK FOR A TAB
JRST .+3 ;ONE FOUND
CAIE U1,15 ;LOOK FOR C.R.
JRST .-10 ;NOT TIME TO STOP
SKIPE TRUNKF ;NOW END COMMENT
PUSHJ PDP,TERPRI
BOL1: PUSHJ PDP,MAGIN
HALT
CAIN U1,11 ;IGNORE SECOND TAB
JRST .-3
MOVEM U1,BORW# ;BLACK OR WHITE TO PLAY
SETZ U2,
CAIN U1,"D"
JRST BOL3
BOL2: PUSHJ PDP,MAGIN
HALT
CAIGE U1,72
CAIGE U1,60
JRST BOL3
IMULI U2,12
ADD U2,U1
SUBI U2,60
SETZ U1,
JRST BOL2
BOL3: MOVEM U2,WINLOS
PUSHJ PDP,NEWLIN
HALT
JUMPE U2,BOL4
CAME U1,BORW
JRST .+4
TRNN U2,1
AOS WINLOS
JRST .+3
TRNE U2,1
AOS WINLOS
BOL4: MOVEI Z,1
CAIN U1,"W"
MOVEM Z,COLOR
CAIN U1,"B"
SETZM COLOR
PUSHJ PDP,BDIN ;SET UP BOARD
MOVE A,U3
PUSHJ PDP,NEWLIN
HALT
PUSHJ PDP,BDIN0
MOVE P,U3
MOVE K,U5
MOVEM A,TA
MOVEM P,TP
MOVEM K,TK
MOVEI U1,"TK"
MOVEM U1,LPOINT
SETZ X2,
SETOM X4VAR
JRST BEGIN2
X4VAR: -1 ;COUNT OF VARIATION BOARDS
BDIN: SETZ U5,
BDIN0: SETZ U3,
BDIN1: HRLZI U4,400000
SETZ U2,
BDIN2: PUSHJ PDP,MAGIN
HALT
CAIGE U1,72
CAIGE U1,60
JRST BDIN3
IMULI U2,12
ADD U2,U1
SUBI U2,60
SETZ U1,
JRST BDIN2
BDIN3: EXCH U1,U2
JUMPE U1,BDIN4
PUSHJ PDP,OUTIN
MOVNS U1
ROT U4,(U1)
TDO U3,U4
CAIE U2,"K"
JRST .+3
TDO U5,U4
JRST BDIN1
BDIN4: CAIN U2,","
JRST BDIN1
POPJ PDP,
;FIXX NOFIND FIXK FIXK2
FIXX: TTYUUO 11,0
SETZM LASCAR
SETZM FLAG#
SETZM FIXINS#
MOVEI U1,1
SETZM COLOR
CAME U1,SI
AOS COLOR
SETZB X3,X4
MOVEM A,PLA
MOVEM P,PLP
MOVEM K,PLK
SETZM OJ
PUSHJ PDP,LEGAL
JRST FIX1 ;NO LEGAL MOVES
AOS OJ ;SET JUMP FLAG
PUSHJ PDP,X4NORM
MOVEI U1,[ASCIZ /LEGAL MOVES ARE:/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,LEGM ;REPORT LEGAL MOVES
SETOM BINDEX
MOVEI Z,1
XORM Z,COLOR ;COLOR IS REVERSED IN SAVMOV
PUSHJ PDP,SAVMOV
MOVEI Z,1
XORM Z,COLOR
HLRZ U1,BOOKI
MOVEM U1,FILEI2
CAME U1,FILEIN
PUSHJ PDP,GETFIL
MOVE U2,BOOKA
MOVE U3,BOOKP
MOVE U4,BOOKK
PUSHJ PDP,FINDX1
JRST NOFIND
MOVEM X1,X1S
MOVEI U1,[ASCIZ /LISTED MOVES ARE /]
PUSHJ PDP,PRINT
MOVE X1,X1S
MOVE X5,INPA(X1)
PUSHJ PDP,EXBITS
PUSHJ PDP,RPMOVE
MOVE X5,INPP(X1)
PUSHJ PDP,EXBITS
SKIPE BOOKK ;A KING BOARD
JRST FIXK ;YES
JUMPE X5,FIX6
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
PUSHJ PDP,RPMOVE
JRST FIX6
NOFIND: MOVEM X1,X1S
MOVEI U1,[ASCIZ /BOARD NOT FOUND, CR OR TYPE MOVE :/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,SCAN
CAIN U1,12 ;A LINE FEED
JRST .-2 ;YES
CAIN U1,15 ;A CR
JRST FIXOK
SETOM FIXINS ;SO NEW BOARD WILL BE INSERTED
SETZM BOOKM
SETZM BOOKM+1
JRST FIX8 ;NOW GET MOVE
FIXK: MOVE Z,X5
MOVE X5,INPK(X1)
PUSHJ PDP,EXBITS
LSH Z,4
IORB X5,Z
JUMPE X5,FIXK2
MOVEI U1,[ASCIZ /, WIN-LOSS DISTANCE IS /]
PUSHJ PDP,PRINT
MOVE U1,X5
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
JRST FIX6
FIXK2: MOVEI U1,[ASCIZ /, REPORTED AS A DRAW./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX6
;RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13
RPMOVE: MOVEM X5,X4
JUMPN X5,.+4
MOVEI U1,[ASCIZ /0-0/]
PUSHJ PDP,PRINT
POPJ PDP,
SKIPN COLOR
JRST .+7
MOVEI U1,1
CAMN X4,X4TAB(U1)
JRST .+3
CAIGE U1,17
AOJA U1,.-3
MOVE X4,U1
SUBI X4,1 ;COUNT FROM ZERO
MOVE U3,MOVES(X4)
JUMPN U3,.+4
MOVEI U1,[ASCIZ /ILLEGAL/]
PUSHJ PDP,PRINT
POPJ PDP,
HLRZ U1,U3
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
HRRZ U1,U3
PUSHJ PDP,NUMOUT
POPJ PDP,
FIX1: MOVEI U1,[ASCIZ /NO LEGAL MOVES FOUND./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
FIX6: TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /CR IF OK, OR ENTER MOVES WANTED/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
FIX7: PUSHJ PDP,SCAN
CAIN U1,12 ;A LINE FEED
JRST FIX7 ;YES
CAIN U1,15 ;A CR
JRST FIXOK
SETZM BOOKM
SETZM BOOKM+1
FIX8: HRLZ U2,U1 ;START IN LEFT HALF
PUSHJ PDP,SCAN
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRR U2,U1 ;TERMINATION IN RIGHT HALF
JUMPE U2,NULL ;TO STORE NO-MOVE BOARD FOR TEST
MOVEI X4,20
CAMN U2,MOVES(X4)
JRST .+6
SOJGE X4,.-2
MOVEI U1,[ASCIZ /ILLEGAL MOVE. /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX6
ADDI X4,1 ;TO COUNT FROM 1
SKIPE COLOR
MOVE X4,X4TAB(X4)
MOVEM X4,BOOKM
SKIPE BOOKK
JRST FIX9K
PUSHJ PDP,SCAN
CAIN U1,15
JRST FIX11
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRRZS U1
HRLZ U2,U1
PUSHJ PDP,SCAN
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRR U2,U1
MOVEI X4,20
CAMN U2,MOVES(X4)
JRST .+6
SOJGE X4,.-2
MOVEI U1,[ASCIZ /ILLEGAL SECOND MOVE, FIRST MOVE ONLY WILL BE USED. /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX11
ADDI X4,1 ;TO COUNT FROM 1
SKIPE COLOR
MOVE X4,X4TAB(X4)
MOVEM X4,BOOKM+1
FIX11: MOVE X1,X1S
SKIPE FIXINS ;IS BOARD IN TABLE
JRST INS4B ;NO SO INSERT
MOVE X1,X1S ;WE NEED THIS
FIX10: HRRZ X2,BOOKM
PUSHJ PDP,INBITS
MOVE U1,INPA(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPA(X1)
SKIPE BOOKK
JRST FIX12
FIX13: MOVE X2,BOOKM+1
PUSHJ PDP,INBITS
MOVE U1,INPP(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPP(X1)
JRST FIXZ
;FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3
FIX12: HLRZ X2,BOOKM
LSH X2,-4
PUSHJ PDP,INBITS
MOVE U1,INPP(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPP(X1)
HLRZ X2,BOOKM
ANDI X2,17
PUSHJ PDP,INBITS
MOVE U1,INPK(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPK(X1)
JRST FIXZ
FIXOK: MOVEI U1,[ASCIZ /NO CHANGE MADE./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST .+2
FIXZ: PUSHJ PDP,DMPFIL
PUSHJ PDP,TERPRI
SETOM BINDEX ;TO OVERWRITE TRASH
POPJ PDP,
ACCEPT: PUSHJ PDP,TERPRI
SETZM U5
TTYUUO 11,0
SETZM LASCAR
MOVEI U1,[ASCIZ /BLACK PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;READ IN BLACK PIECES
MOVEM U3,OA ;STORE BLACK PIECES
MOVEI U1,[ASCIZ /WHITE PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;NOW READ IN WHITE PIECES
MOVEI U1,[ASCIZ /BLACK TO PLAY? /]
PUSHJ PDP,PRINT
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,NOYES
AOSA SI
JRST .+3 ;BLACK IS TO PLAY
EXCH U3,OA
SETZM SIDE
MOVEM U3,OP ;STORE WHITE PIECES
MOVEM U5,OK
MOVE A,OA
MOVEM A,PLA
MOVE P,OP
MOVEM P,PLP
MOVE K,OK
MOVEM K,PLK
PUSHJ PDP,TERPRI
JRST FIXX
ACC: SETZM U3
ACC1: HRLZI U4,400000
ACC2: PUSHJ PDP,SCAN
CAIN U1,15 ;CR?
POPJ PDP, ;YES
TLZE U1,400000 ;NUMBER?
JRST ACC3 ;YES
HRRZS U1 ;GET RID OF LEFT HALF FLAG BITS
CAIN U1,K ;IF A KING ...
TDO U5,U4 ; ... SET KING BIT
JRST ACC1
ACC3: PUSHJ PDP,OUTIN ;CONVERT TO INTERNAL NUMBERS
MOVNS U1
ROT U4,(U1) ;ROTATE TO BIT'S POSITION
TDO U3,U4 ;SET PIECE'S BIT
JRST ACC2
;SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
;Routine to smooth data in EVAL table both diagonally and adjacently
;and leave ((L-R)/(L+R) LSH 14) + CORADD in EVAL space
SM: MOVEM K,KSAVE#
SM1: SUBI K,SIGL11
SETZM EVAL11(K)
HRLZI U1,EVAL11(K)
HRRI U1,EVAL11+1(K)
BLT U1,EVAL11+↑D44(K)
MOVEI U1,2 ;First level start
SM3: MOVEI U2,2
SM4: MOVEI U3,4
SM5: MOVE X1,U1
IMULI X1,3
ADD X1,U2
IMULI X1,5
ADD X1,U3
MOVN X2,X1
ADDI X2,↑D44
ADD X1,K
ADD X2,K
MOVS Z,LRN11(X2) ;To balance tables around zero
ADD Z,LRN11(X1)
LSH Z,-1
TRZ Z,400000
ADDM Z,EVAL11(X1)
;JRST SM5A here to surpress adjacent smoothing
LSH Z,-3
TRZ Z,700000
CAIGE U1,2
ADDM Z,EVAL11+↑D15(X1) ;Upward adjacent smoothing, first term
SKIPLE U1
ADDM Z,EVAL11-↑D15(X1) ;Downward adjacent smoothing, first term
CAIGE U2,2 ;Repeat for second term
ADDM Z,EVAL11+5(X1)
SKIPLE U2
ADDM Z,EVAL11-5(X1)
CAIGE U3,4 ;Repeat for third term
ADDM Z,EVAL11+1(X1)
SKIPLE U3
ADDM Z,EVAL11-1(X1)
SM5A: SOJGE U3,SM5
SOJGE U2,SM4
SOJGE U1,SM3
SETZM CPOS
SETZM CNEG
MOVEI U1,↑D44 ;Now get (L-R)/(L+R) ASH 14
MOVE X1,U1
ADD X1,K
SM6: HLRZ U2,EVAL11(X1)
HRRZ U3,EVAL11(X1)
SUB U2,U3
JUMPE U2,SM6A
LSH U3,1
ADD U3,U2
ASH U2,15 ;Multiply by 8192
IDIV U2,U3 ;and get ratio
SKIPLE U2
AOS CPOS
SKIPGE U2
AOS CNEG
SKIPE U2
ADD U2,CORADD ;Make it always positive for processing
SM6A: MOVEM U2,EVAL11(X1)
SOS X1
SOJGE U1,SM6
MOVE K,KSAVE
JRST L13
;Second level smoothing
SM20: MOVEM K,KSAVE
SM21: SUBI K,SIGL21
SETZM EVAL21(K)
HRLZI U1,EVAL21(K)
HRRI U1,EVAL21+1(K)
BLT U1,EVAL21+↑D342(K)
SM22: MOVEI U1,6
SM23: MOVEI U2,6
SM24: MOVEI U3,6
SM25: MOVE X1,U1
IMULI X1,7
ADD X1,U2
IMULI X1,7
ADD X1,U3
MOVN X2,X1
ADDI X2,↑D342
ADD X1,K
ADD X2,K
MOVS Z,LRN21(X2)
ADD Z,LRN21(X1)
LSH Z,-1
TRZ Z,400000
ADDM Z,EVAL21(X1)
;JRST SM25A here to surpress adjacent smoothing
LSH Z,-3
TRZ Z,700000
CAIGE U1,6
ADDM Z,EVAL21+↑D49(X1)
SKIPLE U1
ADDM Z,EVAL21-↑D49(X1)
CAIGE U2,6
ADDM Z,EVAL21+7(X1)
SKIPLE U2
ADDM Z,EVAL21-7(X1)
CAIGE U3,6
ADDM Z,EVAL21+1(X1)
SKIPLE U3
ADDM Z,EVAL21-1(X1)
SM25A: SOJGE U3,SM25
SOJGE U2,SM24
SOJGE U1,SM23
SETZM CPOS
SETZM CNEG
MOVEI U1,↑D342 ;Now get (L-R)/(L+R) ASH 14
MOVE X1,U1
ADD X1,K
SM26: HLRZ U2,EVAL21(X1)
HRRZ U3,EVAL21(X1)
SUB U2,U3
JUMPE U2,SM26A
LSH U3,1
ADD U3,U2
ASH U2,15 ;Multiply by 8192
IDIV U2,U3 ;and get ratio
SKIPLE U2
AOS CPOS
SKIPGE U2
AOS CNEG
SKIPE U2
ADD U2,CORADD ;Make it always positive for processing
SM26A: MOVEM U2,EVAL21(X1)
SOS X1
SOJGE U1,SM26
MOVE K,KSAVE
JRST L23
SM30: MOVEM K,KSAVE#
SM31: SUBI K,SIGLF
SETZM EVALF(K)
HRLZI U1,EVALF(K)
HRRI U1,EVALF+1(K)
BLT U1,EVALF+↑D224(K)
SM32: MOVEI U1,↑D14
SM33: MOVEI U2,↑D14
SM35: MOVE X1,U1
IMULI X1,↑D15
ADD X1,U2
MOVN X2,X1
ADDI X2,↑D224
ADD X1,K
ADD X2,K
MOVS Z,LRNF(X2)
ADD Z,LRNF(X1)
LSH Z,-1
TRZ Z,400000
ADDM Z,EVALF(X1)
JFCL ;Room for JRST SM35A to surpress adjacent smoothing
LSH Z,-2
TRZ Z,600000
CAIGE U1,↑D14
ADDM Z,EVALF+↑D15(X1)
SKIPLE U1
ADDM Z,EVALF-↑D15(X1)
CAIGE U2,↑D14
ADDM Z,EVALF+1(X1)
SKIPLE U2
ADDM Z,EVALF-1(X1)
SM35A: SOJGE U2,SM35
SOJGE U1,SM33
SETZM CPOS
SETZM CNEG
MOVEI U1,↑D224 ;Now get (L-R)/(L+R) ASH 14
MOVE X1,U1
ADD X1,K
SM36: HLRZ U2,EVALF(X1)
HRRZ U3,EVALF(X1)
SUB U2,U3
JUMPE U2,SM36A
LSH U3,1
ADD U3,U2
ASH U2,15 ;Multiply by 8192
IDIV U2,U3 ;and get ratio
SKIPLE U2
AOS CPOS
SKIPGE U2
AOS CNEG
SKIPE U2
ADD U2,CORADD ;Make it always positive for processing
SM36A: MOVEM U2,EVALF(X1)
SOS X1
SOJGE U1,SM36
MOVE K,KSAVE
JRST L33
;SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 XPAR TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE PAR TABLST TAB1 TABLS2 TAB2 TAB3 TAB3A TAB3B TAB3C TAB4 TAB4A TAB4B TAB5 TAB5A TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB24A TAB25 TAB26 TAB27 TAB31 TAB32 TAB32A TAB33 TAB34
;Register assignments
; X1 Gets used in NUM1
; U1 Address of ASCIZ to print
; X2 Gets used in some subroutine
; U2 -2 -1 0 1 2 Numbers for headings, Index for 1st 3-range term
; X3 Index between tables
; U3 Index to 5 for 5-range terms
; X4 TLIST index for names
; U4 Repeat count
; X5 Index into EVAL table
; U5 Phase
; Q Index for 2nd 3-range term
SGT5: BLOCK 7 ;5-range term totals
SGT5A: BLOCK 7 ;5-range term totals (for second level)
SGT5B: BLOCK 7 ;5-range term totals (for second level)
SGT5C: BLOCK ↑D15 ;15-range term totals (for third level)
SGT3: BLOCK 3 ;1st 3-range term totals
SGT3A: BLOCK 3 ;2nd 3-range term totals
SGTOT: 0 ;Total for 1st level table
NUM4: CAIGE U1,144
CAMG U1,[-144]
JRST .+3
MOVEI X1," "
PUSHJ PDP,TYO
CAIGE U1,12
CAMG U1,[-12]
JRST .+3
MOVEI X1," "
PUSHJ PDP,TYO
NUM1: JUMPL U1,NUM2
MOVEI X1," "
PUSHJ PDP,TYO
JRST NUM3
;Routine to list Signature Tables in a file called SIGTAB.001 etc.
XPAR: SETOM TABFLG#
SKIPA
TABFIX: SETZM TABFLG
POPJ PDP, ;CKLY EXIT
MOVE U1,[SIXBIT /001 /]
MOVEM U1,TBFILE+1
TABFI2: OPEN 2,TBCHAN
JRST TABFIZ
MOVE U1,[SIXBIT / 1ALS/]
MOVEM U1,TBFILE+3
LOOKUP 2,TBFILE
JRST TABFI3
CLOSE 2,
HLLZ U1,TBFILE+1
ADD U1,[1,,0]
MOVEM U1,TBFILE+1
JRST TABFI2
TABFI3: ENTER 2,TBFILE
JRST TABFIZ
OUTBUF 2,4
MOVEI U1,1
EXCH U1,LPFLAG
MOVEM U1,LPFLAS#
PUSHJ PDP,TAB1
RELEAS 2,
MOVE U1,LPFLAS
MOVEM U1,LPFLAG
POPJ PDP,
TABFIZ: OUTSTR [ASCIZ/SIGTAB initiation error/]
POPJ PDP,
TBCHAN: 1 ;Mode
SIXBIT/DSK /
LPTBUF,,0
TBFILE: SIXBIT/TAB/
SIXBIT/001 /
0
SIXBIT/ 1ALS/
;Routine to list Signature Tables (on line when here or to file if from TABFIX)
;If TABFLG is SETOM then only summary info is listed
PAR: SETOM TABFLG
SKIPA
TABLST: SETZM TABFLG
TAB1: MOVEI U5,3 ;Start with phase 3
MOVEI U1,[ASCIZ / Signature Tables after /]
PUSHJ PDP,PRINT
MOVE U1,LABEL
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / boards. /]
PUSHJ PDP,PRINT
TABLS2: MOVE U4,U5
IMULI U4,SIGSIZ
MOVE U2,LABEL+2(U4)
ADD U2,LABEL+3(U4)
ADD U2,LABEL+4(U4)
MOVE U1,LABEL+3(U4)
ASH U1,-1
ADD U1,LABEL+2(U4)
IMULI U1,1750
IDIV U1,U2
IDIVI U1,12
MOVE U2,X2
PUSHJ PDP,RJOUT1
MOVEI U1,[ASCIZ /./]
PUSHJ PDP,PRINT
MOVE U1,U2
PUSHJ PDP,NUMOUT
SOJGE U5,TABLS2
SKIPN TABFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVEI U5,3
TAB2: SKIPE TABFLG
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / Phase /]
PUSHJ PDP,PRINT
MOVE U1,U5
PUSHJ PDP,NUMOUT
SKIPE TABFLG
PUSHJ PDP,TERPRI
SKIPE TABFLG
PUSHJ PDP,TERPRI
MOVE X5,U5
IMULI X5,SIGSIZ
MOVEI X3,6 ;Number of first level tables
MOVE X4,U5
IMULI X4,↑D18 ;18 names per phase
TAB3:
SKIPE TABFLG
JRST TAB3C ;Bypass when PAR or XPAR
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /↓/]
PUSHJ PDP,PRINT
XCT TLIST(X4) ;The 1st 3-range term name
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
XCT TLIST+1(X4) ;The second range-3 term name
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / -1 0 +1
/]
PUSHJ PDP,PRINT
XCT TLIST+2(X4) ;The range-5 term name
PUSHJ PDP,PRINT
MOVEI U4,3
TAB3A: MOVNI U2,2 ;Now print -2 -1 0 1 2 three times
TAB3B: MOVE U1,U2 ;Start line with a -1, 0 or 1
PUSHJ PDP,NUM1
CAIGE U2,2
AOJA U2,TAB3B
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG U4,TAB3A
PUSHJ PDP,TERPRI
TAB3C: MOVEI U2,3
SETZM SGT3(U2)
SETZM SGT3A(U2)
SOJG U2,.-2
MOVEI U3,5
SETZM SGT5(U3)
SOJG U3,.-1
SETZM SGTOT
MOVEI Q,2
MOVNI U4,1 ;The 3 lines of data start with -1, 0, and 1
TAB4: SKIPE TABFLG
JRST TAB4A
PUSHJ PDP,TERPRI
MOVE U1,U4
PUSHJ PDP,NUM1
AOS U4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB4A: MOVEI U2,2
TAB4B: MOVEI U3,4
TAB5: MOVE U1,EVAL11(X5)
ADDM U1,SGT5(U3)
ADDM U1,SGT3(U2)
ADDM U1,SGT3A(Q)
ADDM U1,SGTOT
SKIPN TABFLG
PUSHJ PDP,NUM1
AOS X5
SOJGE U3,TAB5
MOVEI U1,[ASCIZ / /]
SKIPN TABFLG
PUSHJ PDP,PRINT
SOJGE U2,TAB4B
SOJGE Q,TAB4
SKIPE TABFLG
JRST TAB5A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /
Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB5A: SETZM SGTOT
XCT TLIST(X4) ;The first range-3 term name
PUSHJ PDP,PRINT
MOVEI Q,2
TAB8: MOVE U1,SGT3A(Q)
PUSHJ PDP,NUM4
SETZM SGT3A(Q)
SOJGE Q,TAB8
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST+1(X4) ;The 2nd 3-range term name
PUSHJ PDP,PRINT
MOVEI U2,2
TAB7: MOVE U1,SGT3(U2)
PUSHJ PDP,NUM4
SETZM SGT3(U2)
SOJGE U2,TAB7
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST+2(X4) ;The 5-range term name
PUSHJ PDP,PRINT
MOVEI U3,4
TAB6: MOVE U1,SGT5(U3)
PUSHJ PDP,NUM4
SETZM SGT5(U3)
SOJGE U3,TAB6
PUSHJ PDP,TERPRI
ADDI X4,3 ;3 names farther along
SOJG X3,TAB3 ;Now for the next first level table
SKIPN TABFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
TAB20: MOVEI U1,[ASCIZ / Second level
/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVE X5,U5
IMULI X5,SIGSIZ
MOVEI X3,2 ;Number of second level tables
MOVE X4,U5
IMULI X4,↑D18 ;18 names per phase
TAB20A: MOVEI U2,3
SKIPE TABFLG
JRST TAB21
MOVEI U1,[ASCIZ /↓/]
PUSHJ PDP,PRINT
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U2,3
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVNI U2,3
TAB20B: MOVE U1,U2
PUSHJ PDP,NUM1
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
AOS U2
CAIG U2,3
JRST TAB20B
PUSHJ PDP,TERPRI
MOVEI U2,3
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U2,7
MOVEI U1,[ASCIZ /-3-2-1 0 1 2 3 /]
PUSHJ PDP,PRINT
SOJG U2,.-2
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
TAB21: MOVEI U2,6
SETZM SGT5(U2)
SETZM SGT5A(U2)
SETZM SGT5B(U2)
SOJGE U2,.-3
MOVEI U2,6
TAB22: MOVEI U3,6
TAB23: MOVEI Q,6
TAB24: MOVE U1,EVAL21(X5)
ADDM U1,SGT5(U2)
ADDM U1,SGT5A(U3)
ADDM U1,SGT5B(Q)
ADDM U1,SGTOT
SKIPN TABFLG
PUSHJ PDP,NUM1
AOS X5
SOJGE Q,TAB24
MOVEI U1,[ASCIZ / /]
SKIPN TABFLG
PUSHJ PDP,PRINT
SOJGE U3,TAB23
SKIPN TABFLG
PUSHJ PDP,TERPRI
SOJGE U2,TAB22
SKIPE TABFLG
JRST TAB24A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
TAB24A: SETZM SGTOT
MOVEI U2,6
TAB25: MOVE U1,SGT5(U2)
PUSHJ PDP,NUM4
SETZM SGT5(U2)
SOJGE U2,TAB25
MOVEI U1,[ASCIZ /\\/]
PUSHJ PDP,PRINT
MOVEI U2,6
TAB26: MOVE U1,SGT5A(U2)
PUSHJ PDP,NUM4
SETZM SGT5A(U2)
SOJGE U2,TAB26
MOVEI U1,[ASCIZ /\\/]
PUSHJ PDP,PRINT
MOVEI U2,6
TAB27: MOVE U1,SGT5B(U2)
PUSHJ PDP,NUM4
SETZM SGT5B(U2)
SOJGE U2,TAB27
SKIPN TABFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
SOJG X3,TAB20A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / Third level/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVE X5,U5
IMULI X5,SIGSIZ
MOVEI U2,↑D14
TAB31: MOVEI U3,↑D14
TAB32: MOVE U1,EVALF(X5)
ADDM U1,SGT5(U2)
ADDM U1,SGT5C(U3)
ADDM U1,SGTOT
SKIPN TABFLG
PUSHJ PDP,NUM4
AOS X5
MOVEI U1,[ASCIZ / /]
SKIPN TABFLG
PUSHJ PDP,PRINT
SOJGE U3,TAB32
SKIPN TABFLG
PUSHJ PDP,TERPRI
SOJGE U2,TAB31
SKIPE TABFLG
JRST TAB32A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /
Term averages
/]
PUSHJ PDP,PRINT
TAB32A: SETZM SGTOT
MOVEI U2,↑D14
TAB33: MOVE U1,SGT5(U2)
IDIVI U1,↑D15
PUSHJ PDP,NUM4
SETZM SGT5(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB33
PUSHJ PDP,TERPRI
MOVEI U2,↑D14
TAB34: MOVE U1,SGT5C(U2)
IDIVI U1,↑D15
PUSHJ PDP,NUM4
SETZM SGT5C(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB34
PUSHJ PDP,TERPRI
MOVEI X1,14 ;A FF
SKIPN TABFLG
PUSHJ PDP,TYO
SOJGE U5,TAB2 ;Now for the next phase
POPJ PDP,
;LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES
LEGM: SETZM FLAG
MOVEI X4,17
SETZM MOVES(X4) ;CLEAR SPACE
SOJGE X4,.-1
SETZ X4,
MOVEI U3,4
SKIPE U2,PLRF
PUSHJ PDP,LEGM1
MOVEI U3,5
SKIPE U2,PLLF
PUSHJ PDP,LEGM1
MOVNI U3,4
SKIPE U2,PLLB
PUSHJ PDP,LEGM1
MOVNI U3,5
SKIPE U2,PLRB
PUSHJ PDP,LEGM1
PUSHJ PDP,TERPRI
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
; MOVEI U1,15
; PUSHJ PDP,MAGOUT
; MOVEI U1,12
; PUSHJ PDP,MAGOUT
POPJ PDP,
LEGM1: MOVEI U4,↑D35
TRNE U2,1
JRST .+4
LSH U2,-1
SOJG U4,.-3
POPJ PDP,
MOVEI U1,[ASCIZ /,/]
SKIPE FLAG
PUSHJ PDP,PRINT
MOVEI U1,54 ; A COMMA
SKIPE FLAG
PUSHJ PDP,MAGOUT ; CKLY
MOVE U1,U4
PUSHJ PDP,INOUT
HRLZM U5,MOVES(X4)
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
MOVEI U1,55 ;A DASH
PUSHJ PDP,MAGOUT
MOVE U1,U4
ADD U1,U3
SKIPE OJ
ADD U1,U3
PUSHJ PDP,INOUT
HRRM U5,MOVES(X4)
AOS FLAG
AOS X4
JRST LEGM1+3
INOUT: CAIL U1,↑D27
SOS U1
CAIL U1,↑D18
SOS U1
CAIL U1,↑D9
SOS U1
MOVEM U1,U1ZYX#
; PUSHJ PDP,NUMOUT
MOVE X1,U1ZYX
PUSHJ PDP,MAGOU3
POPJ PDP,
EXBITS: LSHC X5,-11 ;EXTRACT GUARD BITS
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,3
POPJ PDP,
FIXIN: MOVE X1,X1S
PUSHJ PDP,INS4C ;MUST INSERT LINE
SKIPE BOOKM+1 ;IS THERE ANOTHER MOVE
JRST FIX13
PUSHJ PDP,DMPFIL
PUSHJ PDP,TERPRI
POPJ PDP,
FIX9K: MOVEI U1,[ASCIZ /[CR FOR DRAW OR TYPE WIN-LOSS DISTANCE /]
PUSHJ PDP,PRINT
TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,SCAN
CAIN U1,12
JRST .-2
CAIE U1,15
HRLM U1,BOOKM
JRST FIX11
NULL: MOVEI U1,[ASCIZ /0-0 STORES A NO-MOVE BOARD. DO YOU WANT THIS. Y OR N: /]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST FIX6 ;TRY AGAIN
JRST FIX11 ;STORE NO-MOVE BOARD
OA: Z
OP: Z
OK: Z
MOVES: BLOCK 20 ;SPACE FOR LEGAL MOVES
;BOUT BOUT0 BOUT1 BOUT2 BOUT3
;************************************************************
;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY. ONE *
;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS *
;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM. *
;************************************************************
BOUT: MOVE U2,SI ;GET MOVE INDEX
MOVEI U2,1
SKIPE COLOR
SETZ U2, ;CKLY
MOVE U4,A ;GET ACTIVE PIECES
BOUT0: MOVE U5,K ;& KINGS
; PUSHJ PDP,TERPRI
; MOVEI U1,15
; PUSHJ PDP,MAGOUT
; MOVEI U1,12
; PUSHJ PDP,MAGOUT
MOVEI U3,1
MOVEI U1,"B"
TRNN U2,1 ;BLACK TO PLAY?
MOVEI U1,"W"
PUSHJ PDP,MAGOUT ; CKLY
; MOVEI U1," "
; MOVEI U1,[ASCIZ /B/]
; TRNN U2,1 ;BLACK TO PLAY?
; MOVEI U1,[ASCIZ /W/]
; PUSHJ PDP,PRINT
MOVEI U1," "
PUSHJ PDP,MAGOUT
LSH U4,1
LSH U5,1
BOUT1: TLNN U4,400000 ;A PIECE THERE?
AOJA U3,.-3 ;NO
MOVE U1,U3
PUSHJ PDP,INOUT ;YES, SO PRINT NUMBER
; MOVEI X1,"K"
; TLNE U5,400000 ;IS PIECE A KING?
; PUSHJ PDP,TYO ;YES, SO PRINT "K"
MOVEI U1,"K"
TLNE U5,400000
PUSHJ PDP,MAGOUT
LSH U4,1
LSH U5,1 ;SHIFT TO NEXT POSITION
JUMPE U4,BOUT2 ;JUMP IF NO MORE PIECES
; MOVEI X1,"," ;THERE ARE MORE PIECES
; PUSHJ PDP,TYO ;SO PRINT COMMA
MOVEI U1,54
PUSHJ PDP,MAGOUT
AOJA U3,BOUT1
BOUT2: TLCE U2,-1 ;FIRST OR SECOND TIME HERE?
JRST BOUT3 ;SECOND, SO EXIT
MOVEI U1," "
PUSHJ PDP,MAGOUT
TRC U2,1
MOVE U4,P
JRST BOUT0
BOUT3:
; PUSHJ PDP,TERPRI
; PUSHJ PDP,TERPRI
; MOVEI U1,15
; PUSHJ PDP,MAGOUT
; MOVEI U1,12
; PUSHJ PDP,MAGOUT
; MOVEI U1,15
; PUSHJ PDP,MAGOUT
; MOVEI U1,12
; PUSHJ PDP,MAGOUT
MOVEI U1," "
PUSHJ PDP,MAGOUT
POPJ PDP,
;XEROX XEROX1 XEROX2 XER2A XEROX3 XEROX4 XEROX5 XEROX7 XEROX8 XEROXZ VARNUM XXIND XXVAL BLACK WHITE NOKING WITHKI DSKIN5 FRMBU5 DSKER5 DATAG5 TERTXT MTEXT MTEXT1 MTEXT2
XEROX:
MOVEI U1,[ASCIZ / XEROX HERE /]
PUSHJ PDP,PRINT
SETZB Q,XXVAL
SETZB U2,XXIND
PUSHJ PDP,GETWHR ;Get the DIREC3 file ***not needed as in CKBZ
RELEAS 5,
PUSHJ PDP,DSKIN5 ;INIT BOARDS.DAT
JRST .+1
MOVEI U1,BTITLE
PUSHJ PDP,MTEXT
PUSHJ PDP,TERTXT
PUSHJ PDP,TERTXT
MOVEI U1,SEETHE
PUSHJ PDP,MTEXT
PUSHJ PDP,TERTXT
PUSHJ PDP,TERTXT
XEROX1: MOVE U3,INDEXX(Q)
JUMPE U3, XEROXZ ;All data processed
MOVEI U1,[ASCIZ / INPCNT=/]
PUSHJ PDP,PRINT
MOVE U1,INDEXC(Q)
MOVEM U1,INPCNT
PUSHJ PDP,NUMOUT
CAMN U3,XXVAL
JRST XEROX4
MOVEM U3,XXVAL
SETOM COLOR ;Signals white to play
CAIGE U3,3
JRST XEROX2
SETZM COLOR ;signals black to play
MOVEI U1,BLACK
SKIPA
XEROX2: MOVEI U1,WHITE
PUSHJ PDP,MTEXT
XER2A: SETO K, ;Use as flag for king boards
TRNE U3,1
JRST XEROX3
SETZ K, ;Set k to 0 if no kings
MOVEI U1,NOKING
SKIPA
XEROX3: MOVEI U1,WITHKI
PUSHJ PDP,MTEXT
PUSHJ PDP,TERTXT
PUSHJ PDP,TERTXT
MOVEI U1,BHEAD
PUSHJ PDP,MTEXT
PUSHJ PDP,TERTXT
PUSHJ PDP,TERTXT
XEROX4: MOVE U3,INDEXF(Q)
MOVEM U3,FILEI2 ;To be the new file name
MOVEI U1,U3
PUSHJ PDP,SIXOUT
PUSHJ PDP,GETFIL ;Read in currently needed BRxxxx file
MOVE U2,INDEXC(Q) ;To get INPCNT
MOVEM U2,INPCNT
SETZ X5, ;Use to index through BRxxxx file
XEROX5: MOVE A,INPA(X5) ;Get the active pieces
MOVE U1,A
JUMPE A,XEROX7 ;This seems to be necessary
MOVE P,INPP(X5)
SKIPE K
MOVE K,INPK(X5)
MOVE U2,[POINT 7,INPM(X5)]
ILDB U1,U2
PUSHJ PDP,DNUM
ILDB U1,U2
CAIN U1,140 ;Trunk moves saved with 140
MOVEI U1,"T" ;Report "T" (in caps) for trunk
PUSHJ PDP,MAGOUT
ILDB U1,U2
PUSHJ PDP,DNUM
MOVEI U1,11 ;TAB
PUSHJ PDP,MAGOUT
HRRZ X1,INPM(X5)
LSH X1,-6
ANDI X1,77 ;MAY BE FLAG BIT TO LEFT
PUSHJ PDP,MAGOU3
MOVEI U1,"-"
PUSHJ PDP,MAGOUT
HRRZ X1,INPM(X5)
ANDI X1,77
PUSHJ PDP,MAGOU3
MOVEI U1,11 ;TAB
PUSHJ PDP,MAGOUT
HRRZ U1,INPM(X5)
TRNN U1,10000 ;Is this a duplicate?
PUSHJ PDP,BOUT ;No, so list board
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
XEROX7: ADDI X5,4
SKIPE K
AOS X5
CAMG X5,INPCNT
JRST XEROX5
XEROX8: AOS Q
MOVEI U1,14 ;A form feed to page
PUSHJ PDP,MAGOUT
JRST XEROX1
XEROXZ: RELEAS 5,
RELEAS 4,
JRST COMEND
POPJ PDP,
VARNUM: Z ;Temp for variation numbers
Z ;VARNUM guard
XXIND: Z ;The last used INDEX table index
XXVAL: Z ;The last used classification
BTITLE: ASCIZ / BOARD LISTINGS/
SEETHE: ASCIZ / (1T3 means first trunk, move 3; lower case letters refer to variations
see Trunk and Variation listing for source information.)/
BLACK: ASCIZ / Black to Move/
WHITE: ASCIZ / White to Move/
NOKING: ASCIZ /, on Boards with No Kings/
WITHKI: ASCIZ /, on Boards with Kings/
BHEAD: ASCIZ /Source Move Positions of Pieces on the Board/
DSKIN5: INIT 5,0 ;To write out final BOARDS file
SIXBIT /DSK/
XWD MGOBUF,0
JRST DSKER5
SETZM DATAG5+2
MOVE U1,[SIXBIT / 1ALS/]
MOVEM U1,DATAG5+3
ENTER 5,DATAG5
JRST DSKER5
OUTBUF 5,11
AOS (PDP)
POPJ PDP,
FRMBU5: BLOCK 3
DSKER5: MOVEI U1,[ASCIZ /COULD NOT ENTER BOARDS/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
RELEAS 5,
POPJ PDP,
DATAG5: SIXBIT /BOARDS/
SIXBIT /DAT/
Z
Z
Z
TERTXT: MOVEI U1,[BYTE (7) 15,12,0] ;CR-LF.
MTEXT: HRLI U1,(POINT 7,0) ;SET UP BYTE POINTER.
MTEXT1: ILDB U2,U1
JUMPE U2,MTEXT2 ;RETURN ON FINAL ZERO.
MOVEM U1,U1SAVE#
MOVE U1,U2
PUSHJ PDP,MAGOUT ;MTEXTT CHARACTER.
MOVE U1,U1SAVE
JRST MTEXT1
MTEXT2: POPJ PDP,
;BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
;************************************************************
;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT. *
;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4. *
;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT *
;************************************************************
BDOUT:; MOVE A,OA
; MOVE P,OP
; MOVE K,OK
PUSHJ PDP,TERPRI
SETZB X4,U2
SETZM X3
MOVE U4,A
MOVE U5,P
AND U4,K ;ACTIVE KINGS
AND U5,K ;PASSIVE KINGS
;\|\\M1SAIL25;\M2CHK.FNT[3,ALS];\F1
PUSHJ PDP,BORDER
MOVEI U1,"\" ;CALL CHK FONT
PUSHJ PDP,MAGOUT
MOVEI U1,"F"
PUSHJ PDP,MAGOUT
MOVEI U1,"2"
PUSHJ PDP,MAGOUT
MOVEI U1,"H" ;UPPER LEFT CORNER
PUSHJ PDP,MAGOUT
PUSHJ PDP,TBORDE
MOVEI U1,"X" ;UPPER RIGHT CORNER
PUSHJ PDP,MAGOUT
PUSHJ PDP,TERPRI
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
PUSHJ PDP,PSTAR
PUSHJ PDP,PLEFT
AGAIN: PUSHJ PDP,PPLUS ;PRINT + SIGN
TRNN U2,7
JRST CRLFCK
AGAIN1: ROT A,1
ROT U4,1
ROT P,1
ROT U5,1
TLNN U4,400000 ;BK?
JRST .+6
SKIPE COLOR
PUSHJ PDP,PWK
SKIPN COLOR
PUSHJ PDP,PBK
JRST BDOUT1
TLNN A,400000 ;BM?
JRST .+6 ;NO
SKIPE COLOR
PUSHJ PDP,PWM
SKIPN COLOR
PUSHJ PDP,PBM
JRST BDOUT1
TLNN U5,400000 ;WK?
JRST .+6 ;NO
SKIPE COLOR
PUSHJ PDP,PBK
SKIPN COLOR
PUSHJ PDP,PWK
JRST BDOUT1
TLNN P,400000 ;WM?
JRST .+6 ;NO
SKIPE COLOR
PUSHJ PDP,PBM
SKIPN COLOR
PUSHJ PDP,PWM
JRST BDOUT1
PUSHJ PDP,PHYFEN ;EMPTY SQUARE
BDOUT1: AOS X4
CAIN X4,↑D8 ;SHIFT OVER BITS 9, 18, 27
JRST BDOUT2
CAIN X4,↑D17
JRST BDOUT2
CAIE X4,↑D26
JRST CRLFCK
BDOUT2: ROT A,1
ROT U4,1
ROT P,1
ROT U5,1
AOS X4
CRLFCK: TRNE U2,7 ;DO WE WANT A CR-LF?
JRST AGAIN ;NO
PUSHJ PDP,PSTAR
PUSHJ PDP,PRIGHT
PUSHJ PDP,TERPRI
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
SETCMM X3
JUMPGE X3,.+4
PUSHJ PDP,PSTAR
PUSHJ PDP,PLEFT
JRST AGAIN1
CAIE U2,↑D64
JRST AGAIN-2
PUSHJ PDP,BORDER
MOVEI U1,"W" ;BOTTOM LEFT CORNER
PUSHJ PDP,MAGOUT
PUSHJ PDP,BBORDE ;BOTTOM BORDER
MOVEI U1,"G" ;BOTTOM RIGHT CORNER
PUSHJ PDP,MAGOUT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
MOVEI U1,"β"
SKIPE COLOR
MOVEI U1,"α"
PUSHJ PDP,MAGOUT
MOVEI U1,"π"
PUSHJ PDP,MAGOUT
MOVEI U1,15
PUSHJ PDP,MAGOUT
MOVEI U1,12
PUSHJ PDP,MAGOUT
ROT A,1
ROT P,1
MOVEI U1,"\" ;RESTORE TEXT FONT
PUSHJ PDP,MAGOUT
MOVEI U1,"F"
PUSHJ PDP,MAGOUT
MOVEI U1,"1"
PUSHJ PDP,MAGOUT
POPJ PDP,
PPLUS: MOVEI U1,[ASCIZ /+ /]
PUSHJ PDP,PRINT
MOVEI U1," " ;NON-PLAYING SQUARE
PUSHJ PDP,MAGOUT
AOS U2
POPJ PDP,
BORDER: MOVEI U1,[ASCIZ /* * * * * * * * * */]
PUSHJ PDP,PRINT
POPJ PDP,
TBORDE: MOVEI U1,"T" ;TOP LINE
SKIPA
BBORDE: MOVEI U1,"U" ;BOTTOM LINE
MOVEI X2,10
PUSHJ PDP,MAGOUT
SOJG X2,.-1
POPJ PDP,
PSTAR: MOVEI U1,[ASCIZ /* /]
PUSHJ PDP,PRINT
POPJ PDP,
PLEFT: MOVEI U1,"V"
SKIPA
PRIGHT: MOVEI U1,"F"
PUSHJ PDP,MAGOUT
POPJ PDP,
PHYFEN: MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U1,"Z" ;EMPTY PLAYING SQUARE
PUSHJ PDP,MAGOUT
AOS U2
POPJ PDP,
PBM: MOVEI U1,[ASCIZ /B /]
SKIPN SIDE
MOVEI U1,[ASCIZ /W /]
PUSHJ PDP,PRINT
MOVEI U1,"d" ;black man
PUSHJ PDP,MAGOUT
AOS U2
POPJ PDP,
PBK: MOVEI U1,[ASCIZ /BK/]
SKIPN SIDE
MOVEI U1,[ASCIZ /WK/]
PUSHJ PDP,PRINT
MOVEI U1,"c" ;black king
PUSHJ PDP,MAGOUT
AOS U2
POPJ PDP,
PWM: MOVEI U1,[ASCIZ /W /]
SKIPN SIDE
MOVEI U1,[ASCIZ /B /]
PUSHJ PDP,PRINT
MOVEI U1,"D" ;WHITE MAN
PUSHJ PDP,MAGOUT
AOS U2
POPJ PDP,
PWK: MOVEI U1,[ASCIZ /WK/]
SKIPN SIDE
MOVEI U1,[ASCIZ /BK/]
PUSHJ PDP,PRINT
MOVEI U1,"C" ;WHITE KING
PUSHJ PDP,MAGOUT
AOS U2
POPJ PDP,
LEGALY: ;SETZM MJW(X3) ;MUST ZERO SINCE BITS MAY BE LEFT FROM BACK UP
AOS (PDP)
SETOM OJ
SETZB U3,U4
SETZB U5,Q
MOVE U1,A
MOVE U2,K
AND U2,U1 ;ACTIVE KINGS
MOVE Z,U1
IOR Z,P
XOR Z,GUARD ;EMPTY SQUARES
MOVE X5,COLOR
XOR X5,X3
ANDI X5,1 ;NEEDED LATER
TRNE X5,1
EXCH U1,U2
JUMPE U1,LEG1
MOVE U3,Z
LSH U3,4
AND U3,P
LSH U3,4
AND U3,U1
LEG1: MOVEM U3,PLRF(X3)
JUMPE U1,LEG2
MOVE U4,Z
LSH U4,5
AND U4,P
LSH U4,5
AND U4,U1
LEG2: MOVEM U4,PLLF(X3)
JUMPE U2,LEG3
MOVE U5,Z
LSH U5,-4
AND U5,P
LSH U5,-4
AND U5,U2
LEG3: MOVEM U5,PLLB(X3)
JUMPE U2,LEG4
MOVE Q,Z
LSH Q,-5
AND Q,P
LSH Q,-5
AND Q,U2
LEG4: MOVEM Q,PLRB(X3)
SKIPE Q ;ARE THERE ANY JUMPS
POPJ PDP, ;JUMP RETURN
SKIPE U5
POPJ PDP,
SKIPE U4
POPJ PDP,
SKIPE U3
POPJ PDP,
AOS (PDP)
SETZM OJ
JUMPE U1,LEG5
MOVE U3,Z
LSH U3,4
AND U3,U1
MOVEM U3,PLRF(X3)
MOVE U4,Z
LSH U4,5
AND U4,U1
MOVEM U4,PLLF(X3)
LEG5: JUMPE U2,LEG6
MOVE U5,Z
LSH U5,-4
AND U5,U2
MOVEM U5,PLLB(X3)
MOVE Q,Z
LSH Q,-5
AND Q,U2
MOVEM Q,PLRB(X3)
LEG6: SKIPE Q
POPJ PDP,
SKIPE U5
POPJ PDP,
SKIPE U4
POPJ PDP,
SKIPE U3
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP, ;NO MOVE RETURN
GUARD: 377377377377
END